我有一个如下所述的数据库表。它正在支持具有多种形式的Java EE鉴别器实体,但我认为这对于这个问题并不重要,我提供了完整性的信息。
表中的行可以采用多种形式,允许哪些字段为空,哪些字段必须为非null,由“type”列的值定义。在这种情况下,例如,当type = 'sail'
eShip
和ePort
列应为非空且eShip
,ePort
& eDate
应该是唯一的。
有没有办法编写约束来支持这个?我真正追求的是eShip
,ePort
&的唯一性约束。 eDate
当`type ='sail'但不介意它们是多行时,当'type'是其他值时,它们都为null?
另一种方法是将表分成两个,一个表保存公共列,一个表用于'sail'特定的东西。但是如果可以的话,我想避免这种情况,因为当我手动搜索数据库时,它会使数据库选择更容易。
非常感谢您提供的任何建议或帮助。
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 | |
+---------+--------------+------+-----+---------+----------------+
答案 0 :(得分:0)
根据您对要求的描述,我建议您为每种类型创建一个表。我对mysql知之甚少,以确定你是否可以通过约束来做。即使有可能,也很难理解和维护。
当你必须手工编写SQL时,也许一个视图可以帮助用例。