作者JYHuang (夏天到了,冷不起來了說)
看板Database
標題Re: [請益] 這種資料的紀錄用怎樣的資料結構比較好?
時間Tue Apr 26 01:29:58 2011
※ 引述《danielguo (Daniel Guo)》之銘言:
: : 3:使用紀錄 (rec) + 集合資料(collect)
: : 紀錄ID 日期 時數(min) 零件集合ID
: : 001 20110401 50 01
: : 002 20110402 100 02
: : 集合ID 主元件ID 零件ID
: : 01 A 001
: : 01 A 002
: : 01 A 003
: : 02 B 002
: : 02 B 003
: : 這樣的話,統計會方便點、資料量也會比較少。
: : 可是集合的編輯似乎會比較麻煩點,可能會變成同樣的集合重複的出現。
: : 看起來也只是把1的方法更正規化一點。
: : 請問是否還可以有更理想的資料結構呢?
: 3 比較適合, 不過這邊欄位不對, 應該是
嗯,因為主元件實體上還是會有一個不可變動的主體在。
零件是裝在主體上,所以我還是意屬把主件ID跟集合ID綁在一起。
: 紀錄ID 日期 時數(min) 主元件ID 零件集合ID
: 001 20110401 50 A 01
: 002 20110402 100 B 02
: 集合ID 零件ID
: 01 001
: 01 002
: 01 003
: 02 002
: 02 003
: 設定主鍵為 (集合ID, 零件ID), 這樣便一定不會重複 (當然應用程式應該先檢查)
: 3 更正了之後基本上和 2 儲存的資料量相同
: 除非有其他額外欄位要考慮, 不然應該這樣用沒錯
既然如此,再順勢問一下相關的判斷法
如果我要做零件的變動,例如把零件01移到主元件B去用。
然後過一陣子又再變動回來主元A時。
在SQL如何判斷這種集合是曾經搭配過的?
主件ID
B
集合ID
03
零件ID
001 ==>001調回主件A時,判斷這個組合曾經出現在集合ID 01
002 不用再去新增一筆集合ID。
003
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.255.131.50
推 danielguo:想到一個辦法是用 hash, MD5("1,2,4,..") 存起來後比對 04/26 02:58
→ danielguo:用 sha 應該比 md5 更適合 04/26 03:32
→ JYHuang:呼..還好MySQL有Group_concat這個函式可以算MD5~ 04/26 10:12