我有一个查找表,我们插入了案例 12 和 20 等值的组合。我很担心,但我不确定这是否是一种不好的做法。那么这怎么可能有害呢?
PK.........Name
1.............A
2.............B
4.............C
8.............D
12............C&D
16............E
20............C&E
我有一个查找表,我们插入了案例 12 和 20 等值的组合。我很担心,但我不确定这是否是一种不好的做法。那么这怎么可能有害呢?
PK.........Name
1.............A
2.............B
4.............C
8.............D
12............C&D
16............E
20............C&E
从您的描述中无法准确判断出问题所在。但是,如果 Name 列包含任何不是 Just a Name 的值,那么您的设计就违反了规范化规则。
唯一性定义变得模糊,在您的示例中,您如何判断列表中存在重复的位置(E、C&E、E&C、C)?(C&E) 和 (E&C) 一样吗?
扩展您的示例,假设 Name 列也与标题相结合,那么查找“Alex”和“Mrs”可能会很困难。例如,您将如何编写查询?是像“Ale Mrs”还是“Mrs Alex”——如果有人有“Mrs”的名字但实际上是Mr怎么办?列分隔符呢?
如果不能准确查询,那么更新也会出问题。将 (C&E) 等值更新为 (C) 或 (E) 是否有效?您能否运行查询将所有 (C&E) 更改为 (C&D)?如果(C&D)已经存在,在这种情况下你会允许(C&D&D)吗?
话虽如此,这种设计在某些情况下可能工作得很好,特别是当两个连接列都是强制性的并且数据被严格用于查找时(例如简单的联系我们表单中的国家/地区),但我个人不赞成它因为没有从中获得真正的价值。
取决于值是否如C
,D
并且从数据管理的角度来看E
应该是原子的。
例如,对于 PK = 12,您是否需要D
独立查询或修改C
(反之亦然)?如果是,则D
在内部存储C&D
违反了原子性原则,因此违反了 1NF,在这种情况下,您应该将表拆分为 1:N 关系:
“1”表:
ID
--
12
“N”表({ID, Name} 是键):
ID Name
-- ----
12 C
12 D