0

私は MySQL を使用しており、テーブルは参照整合性のために innoDB を使用して保存されています。

質問

受注システムを構築しています。私invoiceのテーブルにはtracking_code列とCOD_place列があります

顧客は次の方法のいずれかを使用して私と取引します: 配送または代金引換 (代金引換/個人的に会う)。出荷される各小包には追跡コードがありますが、代金引換の場合はそれを行う場所が必要です. したがって、列tracking_codeCOD_place.

問題は、配送が優先される場合、COD_place列を NULL または空のままにする必要があることです。それ以外の場合は、tracking_codeNULL にする必要があります。

エレガントではありません。これを表す最良の方法は何ですか?methodMySQL で一般化されたエンティティを作成できますか?

エレガントな解決策が思いつかないので、ここであなたの助けを借りました。前もって感謝します!

4

1 に答える 1

0

要求されるトランザクションのタイプを指定するために、追加の列を導入する必要があります。他の情報に基づいてこれを暗黙的に想定しようとしないでください。

テーブル内に冗長情報用のフィールドを含めることは許容されます(NULLを使用)。

または、トランザクションのタイプごとに、そのタイプのトランザクションに必要な関連フィールドのみを含む追加のテーブルを作成することもできます。これには、他のプロセスからの干渉なしにこれらのプロセスを明確に表すことができるという追加の利点があります。

たとえば、CODトランザクションを処理することになっているビジネスロジックがあり、これには「ドライバーが支払いを回収した」という状態が含まれているのに対し、配送トランザクションには「支払いの事前承認済みトランザクションID」を処理する列がある場合があります。配送トランザクションを気にするCODロジックは必要ありません。その逆も同様です。

請求書の追加のtransaction_typeフィールドを使用すると、追加情報を収集するために、どのテーブルに参加するかがわかります。将来的に3番目のタイプを追加した場合、請求書テーブルが拡大し続けることはありません。

于 2013-01-06T09:41:36.060 に答える