如何使外键成为sql server中的主键

时间:2013-05-22 08:06:15

标签: sql-server database visual-studio

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

我正在使用SQL Server 2008作为使用VS 2012开发的Web应用程序。

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

例如,我有5个表。

  1. MemberReport
  2. AdminAssign
  3. PoliceReport
  4. AdminOfficialReport
  5. SuperiorOFficialReport
  6. 我的memberreport表有一个名为memberreportID的主键,我可以将它作为我数据库中所有5个表的通用主键。

    我的adminassign表有memberreportID作为外键,经过大量研究后,我意识到几乎所有人都提到了表必须有一个主键。也许像ID(唯一值)。

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

    我的所有5个表都需要memberreportID作为外键。因此,我想问一下,我是否可以使用我的外键作为我所有其他表的主键以及如何执行此操作?

2 个答案:

答案 0 :(得分:3)

列可以是主键和外键。例如:

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)
    );

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

答案 1 :(得分:0)

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

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

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

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

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

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

拉​​吉