5. Fan Traps
通常 E-R Model 關係都是用口語 “動做” 來表示,如上頁的 “manages”, “studies”
然而口語動作容易有一些誤區,導致做出來的 E-R Model 沒辦法表現一些訊息
例如上圖的 Site 裡面有很多 Despartment,而 Site 雇用很多 Staff
如果關係是這樣子的話,就沒辦法找出一個 Staff 是屬於哪個 Department
可以將關係改成下圖,這樣就可以知道 Staff 是屬於哪個 Department:
13. 哪些資料是冗餘欄位,是否剔除?
再定好表上需要哪些欄位屬性之後,可能會發現好像有很多欄位並不需要
假使 B 欄位好像跟 A 重複了,那我們可以考慮幾個問題看是不是可以把 B 移除:
1. 如果 A 修改了,B 也得跟著一起修改
2. 如果 A 刪除了,B 也得跟著一起刪除
如果上面的條件都符合,那 B 就是冗余的,為了避免修改了 A 而忘了修改 B 的事情
發生,我們可以夠過正規化技巧將 B 移除
其實根據 E-R Model 做出來的表大概都符合第三正規化
不過常常冗余資料移除之後,查詢會變得更困難,效能也會下降,所以要不要移除冗
余也要考慮這些因素來做取捨
若上述條件不符合的話,B 則很有可能是業務所需的必要資料。常見的情況則如訂單
裡面的商品快照,商品快照代表的是下訂單的當下的商品狀態,在下訂單之後不應再
受到上架商品的影響。