代码之家  ›  专栏  ›  技术社区  ›  Maxim Rudolovskii

SQL。如何在表中创建2个或多个外键?

  •  -1
  • Maxim Rudolovskii  · 技术社区  · 3 年前

    我想创建一个表,根据QUANTITY值存储可用书籍。如果数量>0这本书有货。但我有一个错误:

    Msg 1776, Level 16, State 0, Line 48
    There are no primary or candidate keys in the referenced table 'BOOK_INFO' that match the referencing column list in the foreign key 'FK_QUANTITY'.
    Msg 1750, Level 16, State 1, Line 48
    Could not create constraint or index. See previous errors.
    

    代码(问题是表“AVAILABLE_BOOKS”):

    CREATE TABLE BOOKS
    (
        ID INT IDENTITY PRIMARY KEY,
        BOOK_NAME VARCHAR(30) NOT NULL,
        BOOK_AUTHOR VARCHAR(30) NOT NULL
    )
    
    CREATE TABLE BOOK_INFO
    (
        BOOK_ID INT PRIMARY KEY FOREIGN KEY REFERENCES BOOKS(ID),
        QUANTITY INT DEFAULT 1 NOT NULL,
        PRICE DECIMAL(5,2) NOT NULL,
        CONSTRAINT CHECK_PRICE CHECK (PRICE > 0),
        CONSTRAINT CHECK_QUANTITY CHECK (QUANTITY > 0)
    )
    
    CREATE TABLE ABAILABLE_BOOKS
    (
        BOOK_ID INT PRIMARY KEY,
        QUANTITY INT DEFAULT 1 NOT NULL,
        CONSTRAINT FK_BOOK_ID FOREIGN KEY (BOOK_ID) REFERENCES BOOKS(ID),
        CONSTRAINT FK_QUANTITY FOREIGN KEY (QUANTITY) REFERENCES BOOK_INFO(QUANTITY),
        CONSTRAINT CHECK_QUANTITY CHECK (QUANTITY > 0)
    )
    

    我试图更改字段声明 (QUANTITY INT -> QUANTITY INT DEFAULT 1 NOT NULL) , 以及许多其他没有帮助的事情。

    1 回复  |  直到 3 年前
        1
  •  0
  •   Luis LL    3 年前

    您需要在BOOK_INFO(QUANTITY)上创建一个唯一索引

    CREATE TABLE BOOKS ( 
        ID INT IDENTITY PRIMARY KEY, 
        BOOK_NAME VARCHAR(30) NOT NULL, 
        BOOK_AUTHOR VARCHAR(30) NOT NULL 
    )
    
    CREATE TABLE BOOK_INFO ( 
        BOOK_ID INT PRIMARY KEY FOREIGN KEY REFERENCES BOOKS(ID), 
        QUANTITY INT DEFAULT 1 NOT NULL, 
        PRICE DECIMAL(5,2) NOT NULL, 
        CONSTRAINT CHECK_PRICE CHECK (PRICE > 0), 
        CONSTRAINT CHECK_QUANTITY CHECK (QUANTITY > 0) 
    )
    CREATE UNIQUE INDEX IX_BOOK_INFO_QUANTITY ON BOOK_INFO(QUANTITY)
    
    CREATE TABLE ABAILABLE_BOOKS
    (
        BOOK_ID INT PRIMARY KEY,
        QUANTITY INT DEFAULT 1 NOT NULL,
        CONSTRAINT FK_BOOK_ID FOREIGN KEY (BOOK_ID) REFERENCES BOOKS(ID),
        CONSTRAINT FK_QUANTITY FOREIGN KEY (QUANTITY) REFERENCES BOOK_INFO(QUANTITY),
        CONSTRAINT ABAILABLE_BOOKS_CHECK_QUANTITY CHECK (QUANTITY > 0)
    )