MySQL可选约束

时间:2013-01-09 17:32:03

标签: mysql sql constraints

我有一个如下所述的数据库表。它正在支持具有多种形式的Java EE鉴别器实体,但我认为这对于这个问题并不重要,我提供了完整性的信息。

表中的行可以采用多种形式,允许哪些字段为空,哪些字段必须为非null,由“type”列的值定义。在这种情况下,例如,当type = 'sail' eShipePort列应为非空且eShipePort& eDate应该是唯一的。

有没有办法编写约束来支持这个?我真正追求的是eShipePort&的唯一性约束。 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    |                | 
+---------+--------------+------+-----+---------+----------------+

1 个答案:

答案 0 :(得分:0)

根据您对要求的描述,我建议您为每种类型创建一个表。我对mysql知之甚少,以确定你是否可以通过约束来做。即使有可能,也很难理解和维护。

当你必须手工编写SQL时,也许一个视图可以帮助用例。