iT邦幫忙

0

請教資料庫加流水號有必要性原因

想請教
假設一資料結構table 內的資料 就可以滿足查詢
那在什麼情況會需要再給它一個流水號呢?

舉例 權限 功能項目
P0001 F00001
P0001 F00002

2 個回答

10
老鷹(eagle)
iT邦高手 1 級 ‧ 2015-03-23 14:52:12
最佳解答

你可以測試看看 SELECT 流水編號和你的值哪個快!
老鷹這邊以MySQL為例子,SELECT一個訂單的看看(6萬多筆,欄位50幾個)
先測試 WHERE 查詢某欄位

再來測試 WHERE 流水編號(PK)

效率比起來還是流水編號比較快~~!
所以還是乖乖加入流水編號會比較好!
如果對資料庫有興趣的話,可以看一下以下網址的簡報,下次活動也可以來聽聽看!
http://ithelp.ithome.com.tw/question/10166176

u2420123 iT邦新手 5 級 ‧ 2015-03-23 15:29:20 檢舉

感謝老師回應 , 但不解是查流水雖快,但依我舉例子,其實是需從別張表查詢而得到FK再去做一次查詢
,而沒辦法直接查到其流水號編號 , 對於這種結構不是很能理解,非常感謝賜教

有外鍵(FK)關係通常都可以JOIN~!
這種的我的作法會做成VIEW,
再用VIEW去查詢!
並且把外鍵(FK)做index,來加快查詢速度.

u2420123 iT邦新手 5 級 ‧ 2015-03-24 13:41:17 檢舉

感謝老鷹大的回應 ,
昨天後來跟同事也有談到 就提到說有些應該是類似view的作法
就是先查第一次api會紀下流水跟FK的關係,下次查詢後就會使用流水號

0
shengfu
iT邦新手 2 級 ‧ 2015-03-24 08:35:38

我的觀念若有不對,請各位邦友..鞭小力點 > < 謝謝

我使用的是Oracle ERP ,在所有的Oracle table幾乎都會有流水碼ID,這是唯一值,
也是index 欄位,也是關連式資料的關連值,例如記錄料號id,就可以透過此料號ID去
料號主檔串出相關的資料,而不用在相關的系統開一堆欄位去記錄料號資料.

這料號ID就是流水碼,唯一值,Index key
以上是我的淺見...若有不對再請邦友幫我定正一下觀念

---分隔線
但是最近我也跟樓主有一樣的困惑產生了,
我們公司有客製一個外部系統,透過一個權限控管的Table去控制使用者權限.
在權限Table裡面,前人塞入了工號(這是公司的唯一值),確又開了一個ID欄位
而在後續所有的系統裡面,因為都用工號,所以此流水碼ID欄位都沒被用過

我就在想..這是畫虎不成反類犬嘛..
而且那流水碼ID還是要自己手動編輯,每次找出最大號再+1 ..
幾乎這位同事的外部系統Table,都有這所謂的ID欄位,但是也都沒被用到
對我的認知來說,如果後續用的是工號,那麼工號就是Table的ID
如果真的要有所謂的Table 資料為一值,其實已經有個rowid在裡面了.

這是我的淺見,也是我的疑惑,期待後續有邦友的討論.

以DBA角度(老鷹認為):
關聯式資料庫就是這樣玩的阿!
JOIN方便提取資料快速
而且老鷹通常都把常JOIN的SQL做成VIEW
如下圖所示

而且那流水碼ID還是要自己手動編輯,每次找出最大號再+1 ..

我記得資料庫有....AUTO_INCREMENT(自動增量)功能....
Oracle部分老鷹沒使用過,不過可以查查文件

以開發者角度(老鷹認為):
我們把資料庫table list出來的時候,大家會看到刪除/編輯的功能,我們一般都是帶流水編號去取得資料,再去做刪除/編輯的功能!
如果以產品料號之類的當作提取資料的來源,程式這塊又要做一道工,而且提取效率較慢!!

我要發表回答

立即登入回答