我有一个如下所述的数据库表。碰巧它支持具有多种形式的 Java EE 鉴别器实体,但我认为这对这个问题并不重要,我提供的信息是为了完整性。
表中的行可以采用多种形式,哪些字段允许为空,哪些必须为非空,由“类型”列的值定义。在这种情况下,例如,当type = 'sail'
andeShip
列ePort
应该是非 null 并且eShip
, ePort
&eDate
应该是唯一的。
有没有办法编写约束来支持这一点?我真正追求的是唯一性约束eShip
, ePort
&eDate
当 `type = 'sail' 但不介意它们是多行并且当 'type' 是其他值时它们都为空?
这样做的另一种方法是将表分成两个,一个包含公共列的表,一个用于“帆”特定内容的表。但如果可以的话,我想避免这种情况,因为当我手动搜索数据库时,它使数据库选择更容易编写。
非常感谢您提供的任何建议或帮助。
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 | |
+---------+--------------+------+-----+---------+----------------+