以下は、お気に入りの持ち物にフラグを立てる、やや型破りな方法を提供するため、最良のオプションではない場合があります。ただし、利点は、この方法では循環参照のないテーブルが2つだけになり、すべての人がお気に入りの持ち物を1つだけ持つことが保証されることです。
つまり、people
(またはpersons
)との2つのテーブルbelongings
です。people
テーブルの構造は次のとおりです。
person_id INT AUTO_INCREMENT,
other columns as necessary,
PRIMARY KEY (person_id)
belongings
テーブルは次のように作成されます。
belonging_id INT AUTO_INCREMENT,
person_id INT NOT NULL,
is_favourite enum ('1'),
other columns as necessary,
PRIMARY KEY (belonging_id),
FOREIGN KEY (person_id) REFERENCING people (person_id),
UNIQUE (person_id, is_favourite)
重要な要素は、単一の可能な値でis_favourite
null許容型として宣言することです。enum
このように、のペアで一意性制約を宣言する場合、一意性制約は少なくとも1つのメンバーがnullである行を無視するため、同じで空(null)(person_id, is_favourite)
の行をできるだけ多く持つことができます。また、一意の制約に違反するため、を使用して複数を作成することはできません。person_id
is_favourite
person_id
is_favourite = '1'