如何确定哪些列用作外键?

Posted

技术标签:

【中文标题】如何确定哪些列用作外键?【英文标题】:How to determine which columns to use as foreign keys? 【发布时间】:2015-05-08 10:06:11 【问题描述】:

我需要一些关于 SQL 数据库设计的复习,特别是如何以及哪些列用于外键。

以下是我想出的两种设计,请告诉我哪个更有意义?对我来说,我相信设计 2 似乎更好..

编辑:

一个项目只能包含 1 个团队。一个团队可以有一个或多个团队成员。同样,团队成员可以是一个或多个团队的一部分。我正在使用 Microsoft Visio、UML Crow Foot Notation 创建这些图像。

我将 Project 从 ProjectTeamOrg 中分离出来的主要原因是为了分离数据,实际上,我将为一个 Project 拥有许多元素并将这些元素分离到它们自己的数据库表中。

设计 1

设计 2

【问题讨论】:

Project -> ProjectTeamOrg一对一的关系吗? 表Project和ProjectTeamOrg不应该合并吗? 您使用哪个工具来生成这些图像? =) 一个团队成员可以参与多个项目吗?图表就是这样显示的,我只是想确定一下。该图还显示每个项目只能有一个团队成员——我很确定这是错误的。 对不起,我今天才回复,周末去了 :( 一个项目只能包含 1 个团队。一个团队可以有一个或多个团队成员。同样,一个团队成员可以是一个或更多团队。我正在使用 Microsoft Visio、UML Crow Foot Notation 来创建这些图像。 【参考方案1】:

数据库的用途不明确。你没有解释数据流。我看不到 Team 表。它在那里吗?或 ProjectTeamOrg 是团队表。

请解释数据流向。然后有人可以帮助你。

【讨论】:

对不起,我今天才回复,周末去了 :( 一个项目只能包含 1 个团队。一个团队可以有一个或多个团队成员。同样,一个团队成员可以是一个或更多团队。我正在使用 Microsoft Visio、UML Crow Foot Notation 来创建这些图像。【参考方案2】:

告诉我这些表之间的关系..一对一(或)一对多。因为这种关系有助于我们确定表中的哪一列应该有外键。

采用设计 1

根据我的理解;

    Tablename         Columnname    Key 
    Project            Projectid   Primary   
    Projectteamorg     Projectid   Foreign(Reference Project(Projectid))   
    Projectteammember  teamid      Primary  
    Projectteamorg     teamid      Foreign(Reference Projectteammember(teamid))

【讨论】:

那将是一个完美的评论 图片已经指定了关系,||表示一对一和 >|表示一对多

以上是关于如何确定哪些列用作外键?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式确定哪些 SQL 表具有标识列

如何将自动递增的主键也用作外键?

由于 ApplyMapping 不区分大小写,如何确定我需要哪些列?

在 Hibernate 中,如何自动检索父 id 并在子插入中将其用作外键?

在access中如何创建外键?

如何两次引用外键表?