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

Database design 查找表中的组合-数据库设计,database-design,Database Design,我有一个查找表,我们插入了值的组合,如案例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

从你的描述中不可能确切地说出问题所在。但是,如果“名称”列包含任何不只是名称的值,则您的设计违反了规范化规则

唯一性定义变得模糊,在您的示例中,如何判断列表中存在重复项(E、C&E、E&C、C)?。(C&E)与(E&C)相同吗

扩展您的示例,假设Name列也与title组合在一起,那么查找“Alex”和“Mrs”可能会很困难。例如,您将如何编写查询?它像“Ale-Mrs”或“Mrs-Alex”——如果某人的名字是“Mrs”,但实际上是一个先生呢?。柱分离器呢

如果不能进行准确的查询,那么更新也会导致问题。将(C&E)等值更新为(C)或(E)是否有效?您能运行一个查询将所有(C&E)更改为(C&D)吗?如果(C&D)已经存在,在这种情况下,您会允许(C&D&D)吗


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

取决于诸如
C
之类的值,从数据管理的角度来看,
D
E
应该是原子的

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

“1”表:

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

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