2013-11-03 79 views
0

我有一個查找表,我們插入組合的值,如情況12和20. 我很擔心它,但我不確定這是否是一種不好的做法。那麼這怎麼會有害呢?組合查找表 - 數據庫設計

PK.........Name 
1.............A 

2.............B 

4.............C 

8.............D 

12............C&D 

16............E 

20............C&E 

回答

2

從描述中無法確切地說明問題是什麼。但是,如果名稱列包含任何不只是一個名稱的值,那麼您的設計違反了規範化規則。

在您的示例中,唯一性定義會變得模糊,您如何判斷列表中是否存在重複(E,C & E,E & C,C)?是(C & E)與(E & C)相同嗎?

對您的示例進行擴展,假定Name列與標題組合在一起,那麼查找「Alex」和「Mrs」可能會很困難。例如,你將如何編寫查詢?這是否像「麥酒太太」或「亞歷克斯夫人」 - 如果有人有'太太'的名字,但實際上是一個先生?那麼柱分離器呢?

如果無法進行準確的查詢,那麼更新也會導致問題。將(C & E)更新爲(C)或(E)的值是否有效?您可以運行查詢將所有(C & E)更改爲(C & D)?如果(C & D)已經存在,你會允許(C & D & D)在這種情況下?

說了這麼多之後,在某些情況下,這種設計可能會正常工作,特別是當兩個連接列都是強制性的並且數據嚴格用於查找時(例如,簡單的Contact-us表單中的Country-State),但我個人不會不贊成,因爲沒有從中獲得真正的價值。

0

取決於值是否如CDE從數據管理的角度來看原子。

例如,對於PK = 12,是否需要獨立於C(反之亦然)查詢或修改D?如果是的話,存儲DC&D違反atomicity原則,因此1NF,在這種情況下,你應該將表拆分爲1:N的關係:

「1」 表:

ID 
-- 
12 

「N」表({ID,Name}是關鍵):

ID Name 
-- ---- 
12 C 
12 D