0

我有一个查找表,我们插入了案例 12 和 20 等值的组合。我很担心,但我不确定这是否是一种不好的做法。那么这怎么可能有害呢?

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

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

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

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

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

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

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

2 回答 2

2

从您的描述中无法准确判断出问题所在。但是,如果 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)吗?

话虽如此,这种设计在某些情况下可能工作得很好,特别是当两个连接列都是强制性的并且数据被严格用于查找时(例如简单的联系我们表单中的国家/地区),但我个人不赞成它因为没有从中获得真正的价值。

于 2013-11-03T09:15:01.357 回答
0

取决于值是否如CD并且从数据管理的角度来看E应该是原子的

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

“1”表:

ID
--
12

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

ID Name
-- ----
12 C
12 D
于 2013-11-04T11:45:07.543 回答