1

以下に説明するデータベーステーブルがあります。複数のフォームを持つ Java EE ディスクリミネータ エンティティをサポートしている場合がありますが、これはこの質問にとって重要ではないと思います。完全を期すために情報を提供します。

テーブル内の行はさまざまな形式を取ることができ、どのフィールドが null であることが許可され、どのフィールドが null 以外である必要があるかは、'type' 列の値によって定義されます。この場合、たとえば、type = 'sail'およびeShipePortが非 null でeShip、 , ePort&eDateが一意である必要があります。

これをサポートする制約を記述する方法はありますか? 私が本当に求めているのはeShip、 , ePort& eDatewhen `type = 'sail' の一意性制約ですが、'type' が他の値の場合、それらがすべて null の複数の行であることを気にしませんか?

これを行うもう 1 つの方法は、テーブルを 2 つに分割することです。一方のテーブルには共通の列を保持し、もう一方のテーブルには「セイル」固有のものを保持します。しかし、データベースを手動で検索しているときにデータベースの選択を書きやすくするため、できればこれを避けたいと思います。

あなたが提供できるアドバイスや助けに感謝します。

mysql> desc vLegs;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| type    | varchar(10)  | NO   |     | NULL    |                | 
| id      | mediumint(9) | NO   | PRI | NULL    | auto_increment | 
| end     | datetime     | YES  |     | NULL    |                | 
| start   | datetime     | NO   |     | NULL    |                | 
| flight  | varchar(255) | YES  |     | NULL    |                | 
| oprtv   | mediumint(9) | NO   | MUL | NULL    |                | 
| dDate   | date         | YES  | MUL | NULL    |                | 
| dPort   | varchar(5)   | YES  |     | NULL    |                | 
| dShip   | varchar(10)  | YES  |     | NULL    |                | 
| eDate   | date         | YES  | MUL | NULL    |                | 
| ePort   | varchar(5)   | YES  |     | NULL    |                | 
| eShip   | varchar(10)  | YES  |     | NULL    |                | 
| landing | varchar(5)   | YES  | MUL | NULL    |                | 
| takeoff | varchar(5)   | YES  | MUL | NULL    |                | 
+---------+--------------+------+-----+---------+----------------+
4

1 に答える 1

0

要件に関する説明に基づいて、タイプごとに 1 つのテーブルを作成することをお勧めします。あなたがやろうとしていることが制約で可能かどうかを判断するのに十分なmysqlについて知りません。たとえそれが可能であったとしても、それを理解して維持するのは難しいように思えます。

おそらくビューは、SQL を手動で記述しなければならない場合のユース ケースに役立つでしょう。

于 2013-01-09T17:57:25.823 に答える