1

2 つの子テーブルを持つテーブルがあります。親テーブルのレコードごとに、子テーブルの 1 つに 1 つのレコードだけが必要です。それを定義するにはどうすればよいですか?

これが裏話です。この実装を批判するのは自由ですが、私が遭遇したのはこれだけではないので、上記の質問に答えてください:

ユーザー調査に関するデータを保持するデータベースがあります。元々、調査を開始するための 1 つの認証方法で設計されていました。それ以来、要件が変更され、現在、誰かがサインオンして調査を開始する方法は 2 つあります。

もともと、調査テーブルの列に認証トークンをキャプチャしました。要件が変更されたため、認証で取得したいデータが他に 3 つあります。したがって、調査テーブルの各レコードに対して、トークンを 1 つ、または 3 つのセットにすることになります。これらの 4 つすべてが異なるタイプであるため、私の考えでは、1 つが null になる、または 3 つが null になる 4 つの列 (またはさらに悪いことに、これらのシナリオのいずれかの悪いマッシュアップ) の代わりに、 1 つの認証トークンを保持するための 1 つと、3 つを保持するための 2 つの子テーブルがあります。問題は、DDL でそれを定義する方法がわかりません。

私は MySQL を使用しているので、これを可能にする機能が MySQL に実装されていない可能性があります。

4

1 に答える 1

1

これを実装する方法は複数あります

ブール フラグ ロジック

ParentTable に ChildTableDataInserted と呼ばれるブール値フラグを設定でき、いずれかのテーブルに行が挿入された場合にこれを TRUE に更新できます。ChildTableDataInserted が False の場合にのみ、子行に挿入します。これはもちろん、作成したストアド プロシージャを使用するすべての挿入に依存しているため、簡単に違反する可能性がありますが、データベースのオーバーヘッドはわずかです。

トリガー

両方の子テーブルへのデータ挿入にBEFORE INSERTを配置し、障害条件が満たされた場合は、挿入のエラーを発生させることができます。

他に選択肢がまったくなく、これがトリガーを実装するのに適していると思われる場合を除き、私は個人的にトリガーを避けます。

トリガーについて詳しくはこちら

http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

于 2010-03-12T15:21:40.083 に答える