1

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

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

有没有办法编写约束来支持这一点?我真正追求的是唯一性约束eShip, ePort&eDate当 `t​​ype = '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    |                | 
+---------+--------------+------+-----+---------+----------------+
4

1 回答 1

0

根据您对要求的描述,我建议您为每种类型创建一个表。我对 mysql 的了解还不够,无法确定您尝试做的事情是否可以通过约束来实现。即使有可能,听起来也难以理解和维护。

当您必须手动编写 SQL 时,也许视图会对用例有所帮助。

于 2013-01-09T17:57:25.823 回答