ここでは簡単な例を示します。データベースのテーブルに顧客のデフォルトの配送先住所を指定するにはどうすればよいですか?
住所表と1対多の関係にある顧客表があるとします(顧客は複数の配送先住所を持つことができますが、配送先住所は1人の顧客にしか属しません) )。
Customer Table
-------------
customer_id (PK)
Address Table
-------------
address_id (PK)
customer_id (FK)
ここで、各顧客がデフォルトの配送先住所を指定できるようにします。
私は2つの方法が考えられますが、両方とも欠点があります。
オプション1
"IS_DEFAULT" と呼ばれるアドレステーブルにブール列を追加します。彼らはDBモデルを見れば、他の人が
短所
- アプリケーションを理解する
賛否
- 選択クエリは簡単
- 簡単ですですfo 「1つの行のみがデフォルトになることができます」という制約を強制して維持するために使用されます。
- 既定のフィールドを更新するのは、アプリケーションが以前の既定のオプションを確認してリセットする必要があるためです。
オプション2
「ADDRESS_ID」と呼ばれるCustomerテーブルにカラムを追加し、外部キー(も何のアドレスが存在しないだけの場合にはNULLを許可)します。
賛否
- 簡単にユーザーがそれを変更することを決定した場合、デフォルトのアドレスを更新します。
- データベースは、「1つの行のみがデフォルトになります」という制約を維持します。
短所
私は、顧客の表に、私はデフォルトのメタデータのいくつかの種類を追加することを決定するたびに新しいインデックス付きの列を追加する必要があります。
は私が一望できていますこのようなシナリオを処理するための標準的な方法がありますか、私の質問がある
ハックのように思えますかもちろん、EAVのデフォルトオプションテーブルを作成するオプションはありますが、既存のコードベースに変更が加えられているため、できるだけシンプルに保つことをお勧めします。
は、私はそれについて考えたが、その後、私は、デフォルトすなわち、クレジットカードが –
@BillHを占める必要とするすべてのテーブルに新しい「デフォルトテーブル」を作成する必要があると思います。なぜ? Credit_Cardテーブルを指す別のカラム 'default_credit_card_id'を追加することを妨げるものは何もありません。テーブルの名前は、顧客のすべてのデフォルトをキャプチャするのに十分一般的です。 – Mac