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

いくつかのブログでは、リレーションには 1 つの主キーしか存在できないと書かれていますが、この MySQL を実行するとテーブルが作成されます。

4

2 に答える 2

1

1 つの主キーに複数の列を含めることができます。その時はまだ1つのキーです。

ただし、主キーを単一の列の数値/自動数値 (代理キーとも呼ばれます) にすることをお勧めします。Branch_name と ISBN の実際の一意の組み合わせについては、一意のインデックスで十分です。

于 2012-09-22T10:41:29.650 に答える
0

バージョンには単一の複合主キーがあります。それを避けるように言う人もいますが、実際の問題は正規化です。

たとえば、あなたのデザインでは、各支店は本を 1 冊だけ持つことができます。ブック名が重複します。支店の住所、本の著者などの賢明な場所はどこにもありません...

テーブルを正規化する

ISBN の一意のキーを持つ書籍である必要があります (プライマリにすることもできますが、問題が発生する可能性があります)。

BranchID などの識別子を持つブランチ

Stock BookID、BranchID、数量?

これが図書館の場合、多くの場合、書籍の各コピーには登録番号があるため、いくつかのものを逆にすることができます

登録番号、BranchID、および BookId (ISBN) をキーとする Stocks に移動し、複合キーを取り除きます。

ここから抜け出すための重要なポイントは、これらすべてを紙の上で行っていると想像することです。すべての支店の在庫リスト全体を調べたり、本の名前を変更したり、それぞれに著者を追加したりしてもよろしいでしょうか。多分そうじゃない?それと同じくらい非効率的なことをするコードを書くのは手間が減りますが、楽しくありません。

于 2012-09-22T10:55:36.067 に答える