MySQL には次の 2 つのテーブルがあります: Customer(Id, Firstname, Lastname...) Bonus(Id, CustomerId, Value, ...)
この関係は 1 対 1 であり、すべての顧客には 1 つのボーナスしかありません (CustomerId はボーナス テーブルで一意です)。
Q: ボーナス テーブルの Id 列を削除する必要がありますか? (私はその理由または理由を知りたい)
MySQL には次の 2 つのテーブルがあります: Customer(Id, Firstname, Lastname...) Bonus(Id, CustomerId, Value, ...)
この関係は 1 対 1 であり、すべての顧客には 1 つのボーナスしかありません (CustomerId はボーナス テーブルで一意です)。
Q: ボーナス テーブルの Id 列を削除する必要がありますか? (私はその理由または理由を知りたい)
Bonus.Id coulmn を削除し、Bonus.CustomerId を PK にします。これを行うと、Bonus.CustomerId 列が PK になるため、列に一意の制約を設定する必要がなくなります。テーブルを見ている人は誰でも、Bonus.Id 列がなければ、1 対 1 をより明確に見ることができます。Bonus.CustomerId のインデックスは必要ありません。必要なのは PK インデックスだけなので、ディスク容量とメモリ キャッシュの無駄が少なくなります。また、Bonus テーブルへの FK が必要な場合は、CustomerId 値 (新しい PK) を使用します。これは、Bonus だけでなく、Customer または Bonus テーブルに戻るために使用できます。
おそらくボーナス行のないCustomer がいる可能性があるため、実際には真の 1 対 1 ではないと思います。SQL スタイルの外部キー制約は、リレーションシップの参照側では常にオプションです。
Bonus.Id 列が完全に冗長に見えることに同意します。
1 対 1 の場合、余分なテーブルがあるのはなぜですか? 代わりに、「bonusvalue」を顧客テーブルに入れることができます。
(それ以外: はい、ボーナス テーブルの ID を削除できます。顧客 ID は主キーであり、「ID」は完全に冗長です)