以下に説明するデータベーステーブルがあります。複数のフォームを持つ Java EE ディスクリミネータ エンティティをサポートしている場合がありますが、これはこの質問にとって重要ではないと思います。完全を期すために情報を提供します。
テーブル内の行はさまざまな形式を取ることができ、どのフィールドが null であることが許可され、どのフィールドが null 以外である必要があるかは、'type' 列の値によって定義されます。この場合、たとえば、type = 'sail'
およびeShip
列ePort
が非 null でeShip
、 , ePort
&eDate
が一意である必要があります。
これをサポートする制約を記述する方法はありますか? 私が本当に求めているのはeShip
、 , ePort
& eDate
when `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 | |
+---------+--------------+------+-----+---------+----------------+