查找表中的组合 - 数据库设计

时间:2013-11-03 08:41:24

标签: database-design

我有一个查找表,我们插入了值为12和20的值的组合。 我很担心,但我不确定这是不是一种坏习惯。那么这可能有害吗?

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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),但我个人不喜欢赞成它,因为没有从中获得真正的价值。

答案 1 :(得分:0)

取决于CDE等值是否应从数据管理角度来看原子

例如,对于PK = 12,您是否需要独立于D查询或修改C(反之亦然)?如果是,将D存储在C&D内违反了atomicity的原则,因此违反了1NF的原则,在这种情况下,您应该将表格拆分为1:N关系:

“1”表:

ID
--
12

“N”表({ID,Name}是关键):

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