Дополнительные ограничения MySQL

У меня есть таблица базы данных, как описано ниже. Это, происходит, это поддерживает Явское предприятие дискриминатора EE с многократными формами, но я не думаю это важное для этого вопроса, я предоставляю информацию для полноты.

Rows in the table can take a number of forms, and which fields are allowed to be null and which must be non-null is defined by the value of the 'type' column. In this case, for example, when type = 'sail' the eShip and ePort columns should be non-null and eShip, ePort & eDate should be unique.

Is there a way of writing constraints to support this? The one I'm really after is the uniqueness constraint for eShip, ePort & eDate when `type = 'sail' but doesn't mind their being multiple rows with them all null when 'type' is some other value?

Другой способ сделать это состоит в том, чтобы разделить стол на два, один стол, вмещающий общие колонки и таблицу для 'паруса' определенный материал. Но я хотел бы избежать этого, если я могу, потому что это делает базу данных, выбирает легче написать, когда я ищу базу данных вручную.

Большое спасибо за любой совет или помощь можно обеспечить.

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
nl ja de
@WaleedKhan: "хороший ORM" является также чем-то вроде оксюморона;)
добавлено автор a_horse_with_no_name, источник
"Дополнительные ограничения" — что-то вроде оксюморона. Имея тип область в базе данных походит на плохой дизайн мне, "потому что это делает базу данных, выбирает легче написать", не должен быть ведущий фактор позади проектирования баз данных. Получите хороший ORM, если вы имеете к.
добавлено автор Waleed Khan, источник

1 ответы

На основе того, что вы описали относительно своих требований, я предлагаю, чтобы вы составили одну таблицу за тип. Я не знаю достаточно о mysql, чтобы определить, возможно ли то, что вы пытаетесь сделать, с ограничениями. Даже если это возможно, кажется трудным понять и поддержать.

Возможно, представление помогло бы варианту использования, когда необходимо написать SQL вручную.

0
добавлено
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MySQL
MySQL
995 участник(ов)

The group is about MySQL. For code use hastebin.com. Admin: @smlkw

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)