1
   CREATE TABLE branch_book_list (
       branch_name CHAR(10),
       book_ISBN CHAR (13),
       book_name CHAR(40),
       PRIMARY KEY (branch_name, book_ISBN)
   )

一些博客说关系中只能有一个主键,但是当我执行这个 MySQL 时会创建表。

4

2 回答 2

1

一个主键可以包含多个列。那时它仍然是一把钥匙。

不过,将主键设为单列数字/自动值是一个很好的做法,也称为代理键。对于 Branch_name 和 ISBN 的实际唯一组合,您可以使用唯一索引就足够了。

于 2012-09-22T10:41:29.650 回答
0

您的版本中有一个复合主键,有些人会告诉您避免这种情况,但您真正的问题是规范化。

例如,在您的设计中,每个分支只能拥有一本书的副本。书名将重复。对于分支地址,书籍作者等,那里没有任何意义......

规范化您的表格

它应该是具有唯一键 ISBN 的书籍(您也可以将其设为主要,但这可能会导致问题)

具有某些标识符的分支,例如 BranchID

Stock BookID,BranchID,数量?

如果这是一个图书馆,那么通常每本书都有一个注册号,所以你可以颠倒一些东西

并转到由注册号、BranchID 和 BookId (ISBN) 键入的 Stocks,然后去掉复合键。

摆脱这一点的关键是想象你在纸上做所有这些,你是否愿意为每个分支浏览整个股票清单,重命名一本书,或者将作者添加到每个分支。应该不是吧?编写代码来做一些低效的事情,工作量更少,但没有更多乐趣。

于 2012-09-22T10:55:36.067 回答