我有一个查找表,我们插入了值为12和20的值的组合。 我很担心,但我不确定这是不是一种坏习惯。那么这可能有害吗?
PK.........Name
1.............A
2.............B
4.............C
8.............D
12............C&D
16............E
20............C&E
答案 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)
取决于C
,D
和E
等值是否应从数据管理角度来看原子。
例如,对于PK = 12,您是否需要独立于D
查询或修改C
(反之亦然)?如果是,将D
存储在C&D
内违反了atomicity的原则,因此违反了1NF的原则,在这种情况下,您应该将表格拆分为1:N关系:
“1”表:
ID
--
12
“N”表({ID,Name}是关键):
ID Name
-- ----
12 C
12 D