CREATE TABLE branch_book_list (
branch_name CHAR(10),
book_ISBN CHAR (13),
book_name CHAR(40),
PRIMARY KEY (branch_name, book_ISBN)
)
一些博客说关系中只能有一个主键,但是当我执行这个 MySQL 时会创建表。
CREATE TABLE branch_book_list (
branch_name CHAR(10),
book_ISBN CHAR (13),
book_name CHAR(40),
PRIMARY KEY (branch_name, book_ISBN)
)
一些博客说关系中只能有一个主键,但是当我执行这个 MySQL 时会创建表。
一个主键可以包含多个列。那时它仍然是一把钥匙。
不过,将主键设为单列数字/自动值是一个很好的做法,也称为代理键。对于 Branch_name 和 ISBN 的实际唯一组合,您可以使用唯一索引就足够了。
您的版本中有一个复合主键,有些人会告诉您避免这种情况,但您真正的问题是规范化。
例如,在您的设计中,每个分支只能拥有一本书的副本。书名将重复。对于分支地址,书籍作者等,那里没有任何意义......
规范化您的表格
它应该是具有唯一键 ISBN 的书籍(您也可以将其设为主要,但这可能会导致问题)
具有某些标识符的分支,例如 BranchID
Stock BookID,BranchID,数量?
如果这是一个图书馆,那么通常每本书都有一个注册号,所以你可以颠倒一些东西
并转到由注册号、BranchID 和 BookId (ISBN) 键入的 Stocks,然后去掉复合键。
摆脱这一点的关键是想象你在纸上做所有这些,你是否愿意为每个分支浏览整个股票清单,重命名一本书,或者将作者添加到每个分支。应该不是吧?编写代码来做一些低效的事情,工作量更少,但没有更多乐趣。