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 を実行するとテーブルが作成されます。
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 を実行するとテーブルが作成されます。
1 つの主キーに複数の列を含めることができます。その時はまだ1つのキーです。
ただし、主キーを単一の列の数値/自動数値 (代理キーとも呼ばれます) にすることをお勧めします。Branch_name と ISBN の実際の一意の組み合わせについては、一意のインデックスで十分です。
バージョンには単一の複合主キーがあります。それを避けるように言う人もいますが、実際の問題は正規化です。
たとえば、あなたのデザインでは、各支店は本を 1 冊だけ持つことができます。ブック名が重複します。支店の住所、本の著者などの賢明な場所はどこにもありません...
テーブルを正規化する
ISBN の一意のキーを持つ書籍である必要があります (プライマリにすることもできますが、問題が発生する可能性があります)。
BranchID などの識別子を持つブランチ
Stock BookID、BranchID、数量?
これが図書館の場合、多くの場合、書籍の各コピーには登録番号があるため、いくつかのものを逆にすることができます
登録番号、BranchID、および BookId (ISBN) をキーとする Stocks に移動し、複合キーを取り除きます。
ここから抜け出すための重要なポイントは、これらすべてを紙の上で行っていると想像することです。すべての支店の在庫リスト全体を調べたり、本の名前を変更したり、それぞれに著者を追加したりしてもよろしいでしょうか。多分そうじゃない?それと同じくらい非効率的なことをするコードを書くのは手間が減りますが、楽しくありません。