簡體   English   中英

為什么sql中的多對多關系表將兩個外鍵都實現為主鍵?

[英]why does junction table of many to many relation in sql implemet both foreign key as primary key?

CREATE TABLE Books(
        BookID SMALLINT NOT NULL PRIMARY KEY,
        BookTitle VARCHAR(60) NOT NULL,
        Copyright YEAR NOT NULL
     )




CREATE TABLE Authors(
        AuthID SMALLINT NOT NULL PRIMARY KEY,
        AuthFN VARCHAR(20),
        AuthMN VARCHAR(20),
        AuthLN VARCHAR(20)
     )


CREATE TABLE AuthorBook(
        AuthID SMALLINT NOT NULL,
        BookID SMALLINT NOT NULL,
        PRIMARY KEY (AuthID, BookID),
        FOREIGN KEY (AuthID) REFERENCES Authors (AuthID),
        FOREIGN KEY (BookID) REFERENCES Books (BookID)
    )

這里的聯結表是authorbook為什么使用主鍵(authorid,bookid)

為什么沒有單獨的表ID並將其設為主鍵?

為什么不使用單獨的表ID並使其成為主鍵?

因為您隨后需要在AuthIDBookID上創建唯一索引,以確保不會將重復的(AuthID, BookID)對插入此表中。

具有許多索引通常會減慢插入和更新的速度,並增加磁盤上數據的大小。 通過具有復合主鍵,該問題被最小化。

話雖如此,某些ORM(最著名的是Django )不支持多列主鍵。 因此,Django的ManyToManyField確實具有一個順序的主鍵以及(AuthID, BookID)上的一個非(AuthID, BookID)鍵-正是您所要求的替代方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM