首页 文章

主键和外键同时使用

提问于
浏览
36

在SQL Server 2008中是否可以创建一个由2列同时创建主键和外键的表?如果是的话,这样的代码怎么样?我已经搜索过,什么都没有 .

4 回答

  • 3

    好没问题:

    CREATE TABLE dbo.[User]
    (
      Id int NOT NULL IDENTITY PRIMARY KEY,
      Name nvarchar(1024) NOT NULL
    );
    
    CREATE TABLE [Group] 
    (
      Id int NOT NULL IDENTITY PRIMARY KEY,
      Name nvarchar(1024) NOT NULL
    );
    
    CREATE TABLE [UserToGroup]
    (
      UserId int NOT NULL,
      GroupId int NOT NULL,
      PRIMARY KEY CLUSTERED ( UserId, GroupId ),
      FOREIGN KEY ( UserId ) REFERENCES [User] ( Id ) ON UPDATE  NO ACTION  ON DELETE  CASCADE,
      FOREIGN KEY ( GroupId ) REFERENCES [Group] ( Id ) ON UPDATE  NO ACTION  ON DELETE  CASCADE
    );
    

    这通常用于模拟多对多关系 .

  • 1

    这些是完全不同的结构 .

    Primary Key 用于强制表中的唯一性,并且是特定记录的唯一标识符 .

    Foreign Key 用于参照完整性,以确保另一个表中存在值 .

    外键需要引用另一个表中的主键 .

    如果您想拥有一个唯一的外键,您可以制作一个FK约束并为该相同的字段添加唯一的索引/约束 .

    出于参考目的,SQL Server允许FK引用 UNIQUE CONSTRAINT 以及 PRIMARY KEY 字段 .

  • 8

    这可能不是一个好主意,因为通常你想在表中允许重复的外键 . 即使你现在没有,将来也可能,最好不要这样做 . 见Is it fine to have foreign key as primary key?

  • 52

    只需快速说明 - 来自Microsoft页面(http://msdn.microsoft.com/en-us/library/ms189049.aspx)......

    “外键约束不必仅链接到另一个表中的主键约束;它也可以定义为引用另一个表中UNIQUE约束的列 . ”

    不经常使用,但在某些情况下有用 .

相关问题