唔知之前有無師兄提過, sql 中的 record 對等的, 無先後之分, 如要有先後便要加一個 timestamp 的 field. ...
chancho 發表於 2016-4-1 16:49



好多書本 的確會話教人 timestamp 係 unique, 不過, 今次樓上位 ching 無講錯, 今時今日, 係有可能唔 unique.  
唔係話書本錯, 而係時代唔同左, 科技進步哂.
timestamp 同 identity 之類既 sequence number 唔同,   timestamp 係基於時間.
當初出 SQL 既年代, process 一條 SQL 要既時間比家陣長, 而 timestamp 一般可以去到千分一秒或者更細, 係當時, 基本上變相可以令到 timestamp 變成 unique.   
但係今時今日, 睇下你用乜野機, 如果檯頭部機去行 SQL server, 用 timestamp 當 unique 都話者 OK.  但係, 如果用部 勁既 server, 就有機會同一個時間單位內, 處理到超過一條 insert, 結果就有可能 duplicate 了.  除非個 engine 加入一D logic 令佢多 D 變化, 不過有違當初用 timestamp 簡單做出 unique key 既原意了.

如果你明白 duplicate 既原因, 你認為加個唔 unique 既 foreign key, 會唔會肯定係可以變成 unique 呢?
結果只係減低機會率, 而唔係完全避免.  又係睇彩數既做法, 鐘意賭運既無計, 不過就盡量唔好喇.

TOP

本帖最後由 snoopy11hk 於 2016-4-2 01:44 編輯
我唔熟 oracle 既 syntax, 但重點係明白做緊乜, 再跟番 syntax 去執.   
唉....連個原理都解釋埋, 你都 ...
Super169 發表於 2016-4-2 01:11


睇黎最大問題係你連成個 analytic function 都唔識, 雞同鴨講

如果以上成立, 你果句野的確可以做出想要既答案.  如果只係要答案, 勉強可以叫 OK.
   不過, 如果以上成立, 你果同樣係有點多餘, 因為既然同一 group 入面, 無排序會跟事入次序, 跟本就唔需要用 input_date 排一次.


ROW_NUMBER( )
   OVER ([ query_partition_clause ] order_by_clause)

order_by_clause 係 mandatory 的 clause

我唔知你係到執呢 D  syntax 野有咩意思

- 如果以上唔成立, 你果句野既結果係不能確定, 所以係好大問題既 SQL.


你連最基本的 deterministic 都 唔清楚, 就係話好大問題
最簡單的 row insert principle 都係到 described as "過左火"
根本無 dbms 會話俾你聽, 邊條 row 會係邊個位
要做的, 自行construct 個 primary key 去 ensure 番

唔係的, 我點解要 care deterministic?
rubbish in rubbish out
我做左 design by contract 所要求的野
你個 table rubbish 左, 當然就 rubbish out

TOP

睇黎最大問題係你連成個 analytic function 都唔識, 雞同鴨講



ROW_NUMBER( )
   OVER ([ query_partit ...
snoopy11hk 發表於 2016-4-2 01:33



你好似仲係唔明, 我一直都唔係執緊 syntax (我根本就唔熟 Oracle 既 syntax, 點執?), 我係針對緊 requirement 同 performance  去諗 SQL.  
之前都講過, syntax 好易試, 有機既打入去行就得, 無乜好執.  反而 明白個原理, 去做一條好既 SQL 至有意思.

TOP

本帖最後由 snoopy11hk 於 2016-4-2 01:59 編輯
你好似仲係唔明, 我一直都唔係執緊 syntax (我根本就唔熟 Oracle 既 syntax, 點執?), 我係針對緊 requir ...
Super169 發表於 2016-4-2 01:38



    你話你唔係執緊 syntax,
同我講 oracle order_by_clause 係無必要
, 係有點多餘
係你唔明白 點解 order by clause 有存在的必要

其實講左咁耐, 最簡單要做 optimization 必須要做的野就係試
麻煩師兄 俾個  tkprof 睇下
咁先有意義

TOP

好多書本 的確會話教人 timestamp 係 unique, 不過, 今次樓上位 ching 無講錯, 今時今日, 係有可能唔 un ...
Super169 發表於 2016-4-2 01:33



    仲有要加埋落 Unique Constraint/ Primary Key
咁先 ensure 到 一定無任何 duplicate primary key

TOP

睇黎最大問題係你連成個 analytic function 都唔識, 雞同鴨講



ROW_NUMBER( )
   OVER ([ query_partit ...
snoopy11hk 發表於 2016-4-2 01:33



rowid 或者係 rownum 之類, 如果係 system 自己送既 unique identifier, 就應該自己會 handle duplication.
如果你話加個 primary key 可以 ensure 到, 咁就係自己打自己了, 一方面你相信加個 primary key 佢個 engine 可以 識 check duplication, 另一方面你又覺得佢自己做既 identifier 可能會 duplicate.

table rubbish, 作為一個 programmer, 唔係要做番個 rubbish out, 而係應該同要求既人講番點解佢個 table 係 rubbish.   當然, 唔去諗就交 D rubbish 比人, 可能係你至會覺得正常.

TOP

本帖最後由 snoopy11hk 於 2016-4-2 02:46 編輯
rowid 或者係 rownum 之類, 如果係 system 自己送既 unique identifier, 就應該自己會 handle duplicati ...
Super169 發表於 2016-4-2 02:35



    我係指如果要 no duplication 係要落 constraint/primary key,唔係靠咩unique identifier 去 做 sorting

用 rowid 只係最後一招, 平日唔會用, rowid 算係 dirty tricks 黎, 無啦啦要用 row unique identifer, 即係 design 有問題

正路用rowid 只係用黎將 table 的 row 分批 process

table rubbish 作為一個 programmer 可以俾 advice, 但同樣都要兩手準備
起碼未 fix 到前都有 D 野交到貨
deliver on time 係問題黎

TOP

仲有要加埋落 Unique Constraint/ Primary Key
咁先 ensure 到 一定無任何 duplicate primary key ...
snoopy11hk 發表於 2016-4-2 02:11



又係同一個毛病了.

加 unique constraint 去叫個 engine 避免加入 duplicate key, 但唔代表你做出黎既 key 係 unique.
只不過, 當你做出 duplicate 既既 key 又想 insert 入去果陣, 佢會 reject 你.

同之前一樣, 既然要落 unique constraint, 又駛乜加個 foreign key 喎.  
你既問題係只要 syntax 無錯, 結果無錯, 就好鐘意叫個 server 做無謂野.

真係投降了, 大家睇既方向唔同.  你只係需要做到就算, 所以只係放眼於個 syntax work 唔 work.   
無錯, 你咁樣做係可以寫到一句唔死既 SQL.  
不過, 當你寫左一段時間之後, syntax 呢樣野, 根本唔需要諗太多, 寫慣左就好少會錯, 而且有錯都好易執出黎.
如果想改善既, 就應該去諗下個 engine 點做, 點樣可以善用個 engine 去寫野.  
好多野, 唔係書本會有既.  只係拋書包, 結果只係會綁住自己.  連自己寫既野, 背後有乜野假設至成立都唔知, 好難要求你諗太多.

家陣點同你講, 你都係走唔出個框, 我投降了.  
而且, 講 Oracle 你比我熟, 我好難憑空去試下佢點做野, 你就當我講既係廢話, 用番你既方法去諗喇.

TOP

又係同一個毛病了.

加 unique constraint 去叫個 engine 避免加入 duplicate key, 但唔代表你做出黎既  ...
Super169 發表於 2016-4-2 02:46


其實我一直的建議係 Foreign Key + Timestamp As Primary Key (Cookbook mode)
Primary Key 包 unique constraint
咁就 ensure 一定無 deterministic problem (你成日擔心的野)

我都會睇佢 overhead 大唔大, 唔大的話, 無咩需要去 tune
正如一開始講
其實 full table scan + window sort
同自己諗的最快差幾遠

當呢 D optimizer 可以自己搞掂你都哂時間去 optimize
咁點有咁多時間去 optimize optimizer 都 optimize 唔到的 query?

拋書包係你唔理解dbms做緊咩定你諗多左野?
好多野就好似佢咁寫, non deterministic 就係 non deterministic
你見到佢好似 deterministic 就假設係 deterministic 咁咪出事囉
你連佢 guarantee 緊 D  咩都唔清楚, 咁點討論落去?

TOP

我係指如果要 no duplication 係要落 constraint/primary key,唔係靠咩unique identifier 去 做 sor ...
snoopy11hk 發表於 2016-4-2 02:44



本來唔想再回 SQL 既野, 不過有 D 工作態度既問題, 都係忍唔住口.  
可能大家做野既取態唔同, 如果明知做出黎既野有問題, 我會先同個客講清楚, 如果佢堅持要垃圾就做, 會係 spec 講明係有乜野垃圾至做.  否則寧願唔交貸, 都唔會唔聲唔聲比舊垃圾人.

TOP