2013-11-03 43 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