4

如何将外键作为表的主键?

我将 SQL Server 2008 用于使用 VS 2012 开发的 Web 应用程序。

目前,这就是我的数据库的设计方式。经过研究,似乎所有 talbe 都必须有一个唯一的主键来识别行。不幸的是,我的一些表似乎不需要主键,因为我的外键足以作为唯一键。

例如,我有 5 张桌子。

  1. 会员报告
  2. 管理员分配
  3. 警方报告
  4. Admin官方报告
  5. 高级官方报告

我的 memberreport 表有一个名为的主键memberreportID,我可以将它用作我数据库中所有 5 个表的通用主键。

我的 adminassign 表有memberreportID一个外键,经过大量研究,我意识到几乎所有人都提到表必须有一个主键。可能类似于 ID(唯一值)。

但是,在我看来,memberreportID基本上可以用作我拥有的所有 5 个表的唯一键(主键)。

我所有的 5 个表都需要memberreportID作为它们的外键。因此我想问一下我是否可以使用我的外键作为我所有其他表的主键以及如何做到这一点?

4

2 回答 2

9

一列既可以是主键,也可以是外键。例如:

create table t1 
    (
    id int not null
,   constraint PK_T1 primary key (id)
    );

create table t2 
    (
    id int not null
,   constraint PK_T2 primary key (id)
,   constraint FK_T2_ID foreign key (id) references t1(id)
    );

请注意,这意味着您必须先在第一个表中添加行,然后才能将其添加到第二个表中。

于 2013-05-22T08:12:53.493 回答
1

主键和外键是两种类型的约束,可用于强制 SQL Server 表中的数据完整性。这些是重要的数据库对象。

表通常具有一列或列组合,其中包含唯一标识表中每一行的值。这一列或多列称为表的主键 (PK),并强制执行表的实体完整性。因为主键约束保证数据的唯一性,所以它们经常在标识列上定义。为表指定主键约束时,数据库引擎通过自动为主键列创建唯一索引来强制数据唯一性。此索引还允许在查询中使用主键时快速访问数据。如果在多个列上定义了主键约束,则值可能在一列中重复,但主键约束定义中所有列的值的每个组合必须是唯一的。

外键 (FK) 是一列或列组合,用于在两个表中的数据之间建立和实施链接,以控制可以存储在外键表中的数据。在外键引用中,当保存一个表的主键值的一个或多个列被另一个表中的一个或多个列引用时,将在两个表之间创建一个链接。此列成为第二个表中的外键。

我猜一个给定的memberreportID会在 MemberReport 表中出现一次,但可以在其他表中出现多次。在您的 MemeberReport 表中定义memberreportID为 PK,将确保该表中 ID 的唯一性。在其他表中将其定义为 FK 将确保 ID 存在于 MemberReport 表中,然后才能存在于任何其他表中。

在所有表中将其定义为 PK,将确保给定 ID 在每个表中只能存在一次。如果您的数据是这种情况,那么您可以使用与 PK 和 FK 相同的列。但是,如果是这样的话,我觉得您的数据库设计可能需要重新审视。

您为什么不发布表结构和一些示例数据?

拉吉

于 2013-05-22T08:28:53.273 回答