1

问题是存在非常大的关系,以至于在规范化后它们有 20 个主键(复合键),它们实际上是外键。

这些必须声明为主键才能唯一地标识关系。这个对吗?

4

4 回答 4

4

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

外键和“主”键是完全不同的概念,即使是对数据库设计领域稍有了解的任何人,也很难将它们相互混淆。

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

于 2010-05-17T20:14:17.893 回答
3

首先,永远不要使用复合键。他们是一种糟糕的技术。它们很慢,并且在更改时维护起来是一场噩梦。

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

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

于 2010-05-17T21:37:04.073 回答
0

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

于 2010-05-17T17:55:35.897 回答
0

我在可视化具有 20 个与一个表相关的表的设计时遇到了麻烦。

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

于 2010-05-17T17:58:05.333 回答