1
我有一個數據庫表,如下所述。它恰好支持具有多種形式的Java EE辨別器實體,但我不認爲這對於這個問題很重要,我提供了完整性的信息。MySQL可選約束
表中的行可以採用多種形式,允許哪些字段爲空,哪些字段必須爲非空值由'type'列的值定義。在這種情況下,例如,當type = 'sail'
eShip
和ePort
列應該爲非零並且eShip
,ePort
& eDate
應該是唯一的。
有沒有寫約束來支持它的方法?我真正追求的是eShip
,ePort
& eDate
的唯一性約束當`type ='sail'但不介意它們是多行時,它們全都爲null當'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 | |
+---------+--------------+------+-----+---------+----------------+
「可選約束」 - 有點矛盾。在數據庫中有一個'type'字段對我來說看起來很糟糕,「因爲它使得數據庫選擇更容易編寫」不應該是數據庫設計背後的驅動因素。如果必須獲得一個好的ORM。 –
@WaleedKhan:「好的ORM」也有點矛盾;) –