数据库已规范化,但生成的复合键包含20列

时间:2010-05-17 17:52:14

标签: database-design normalization database-normalization

问题是存在如此巨大的关系,在规范化之后它们就像20个主键(复合键),它们实际上是外键。

必须将这些声明为唯一标识关系的主键。这是对的吗?

4 个答案:

答案 0 :(得分:4)

如果您说“外键确实是外键但需要声明为主键”,那么您实际上表明您缺乏进行数据库设计的能力,技能和权限。 / p>

外键和“主键”是截然不同的概念,任何在数据库设计领域都具有远程知识的人都不可能彼此混淆。

也许你可以再试一次,解释一下你的意思。

答案 1 :(得分:2)

首先,不要使用复合键。它们是一种糟糕的技术。它们很慢,在变化时是一个噩梦。

如果您需要两个或多个字段的唯一性,则不需要主键,您需要一个唯一索引。使表的PK成为代理键(最好是int)。

如果您尝试创建具有一对一关系的表,则可以使用父表的PK作为Child表的PK并在表之间设置PK_FK关系;但是,需要20个单独的一对一表是不寻常的。

答案 2 :(得分:0)

听起来你的数据库很庞大并且有很多关系;为简化主键情况,您可以做的一件事是将单个列定义为每个表的主键,并使用自动递增的int或guid数据类型。这样,您可以确保唯一性,并且您的外键至少独立于您的主键。

答案 3 :(得分:0)

我无法使用与一个表有关系的20个表来可视化设计。

如果没有查看您的数据设计,我无法分辨,但听起来您设计的是分层数据库,而不是关系数据库。