sql - SQL Server:在多列上添加外键

标签 sql sql-server database sql-server-2016

我试图在一个表的两列上创建一个外键,以指向另一个表的同一列,但似乎得到了一个错误。
我正在将SQL Server与Microsoft SQL Server Management Studio一起使用。
我做的是:

CREATE TABLE House 
(
    hid         INTEGER         PRIMARY KEY,
    hname       VARCHAR(32)     NOT NULL,
    address     VARCHAR(128)    NOT NULL,
);

CREATE TABLE Room 
(
    sid         INTEGER,
    hid         INTEGER         FOREIGN KEY REFERENCES House(hid),
    rname       VARCHAR(32)     NOT NULL,

    CONSTRAINT sid_pk PRIMARY KEY(sid, hid)
);

CREATE TABLE Seat 
(
    hid         INTEGER,
    sid         INTEGER,
    plid        INTEGER,
    row         INTEGER         NOT NULL,
    seat        INTEGER         NOT NULL,

    CONSTRAINT sid_fk 
        FOREIGN KEY (hid, sid) REFERENCES Room(hid, sid), <-- Here's the error
    CONSTRAINT plid_pk 
        PRIMARY KEY (hid, sid, plid),

    UNIQUE(hid, sid, row, seat)
);

我一直听到“错误1776”说房间桌子上没有主键…

最佳答案

根据@hogan的评论..作为社区wiki发布,这样就不会丢失
Room表中,主键是(sid, hid)。但是在seat表中,您正在引用一个新的主键Room(hid, sid)
因此,如下所示更改room表约束定义
CONSTRAINT sid_fk FOREIGN KEY (hid, sid) REFERENCES Room(sid,hid)

关于sql - SQL Server:在多列上添加外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41305693/

相关文章:

sql - 选择中间行失败,只有一行

php - 当 "all_participant"是 "0"时,数据库的结构是否正确以处理这种情况?

SQL 更新查询导致触发器中有两行

sql - 如何更好的优化SQL查询?

mysql - 从重复行中选择最大值

sql - 如何减少sql server查询时间

sql - 使用 CTE 拆分表中的行

Android Studio SQLite 游标

php - Laravel 在查询时从数据库中的字符串中获取整数值

java - 如何跟踪每月和每年的数据数量?