5

MySQL には次の 2 つのテーブルがあります: Customer(Id, Firstname, Lastname...) Bonus(Id, CustomerId, Value, ...)

この関係は 1 対 1 であり、すべての顧客には 1 つのボーナスしかありません (CustomerId はボーナス テーブルで一意です)。

Q: ボーナス テーブルの Id 列を削除する必要がありますか? (私はその理由または理由を知りたい)

4

3 に答える 3

4

Bonus.Id coulmn を削除し、Bonus.CustomerId を PK にします。これを行うと、Bonus.CustomerId 列が PK になるため、列に一意の制約を設定する必要がなくなります。テーブルを見ている人は誰でも、Bonus.Id 列がなければ、1 対 1 をより明確に見ることができます。Bonus.CustomerId のインデックスは必要ありません。必要なのは PK インデックスだけなので、ディスク容量とメモリ キャッシュの無駄が少なくなります。また、Bonus テーブルへの FK が必要な場合は、CustomerId 値 (新しい PK) を使用します。これは、Bonus だけでなく、Customer または Bonus テーブルに戻るために使用できます。

于 2010-06-16T12:44:03.337 に答える
1

おそらくボーナス行のないCustomer がいる可能性があるため、実際には真の 1 対 1 ではないと思います。SQL スタイルの外部キー制約は、リレーションシップの参照側では常にオプションです。

Bonus.Id 列が完全に冗長に見えることに同意します。

于 2010-06-16T19:20:58.840 に答える
0

1 対 1 の場合、余分なテーブルがあるのはなぜですか? 代わりに、「bonusvalue」を顧客テーブルに入れることができます。

(それ以外: はい、ボーナス テーブルの ID を削除できます。顧客 ID は主キーであり、「ID」は完全に冗長です)

于 2010-06-16T09:55:47.870 に答える