Требовать одно из набора полей в SQL - PullRequest
1 голос
/ 18 августа 2011

У меня есть сущность, давайте назовем «машину», у которой есть группа сущностей, из которой она берет свое имя.По крайней мере одно из этих полей является обязательным, но можно указать более одного.Таким образом, в приведенном ниже примере, если имя хоста и IP-адрес не заданы, должен быть указан служебный тег.Я использую Propel 1.5 в качестве ORM.

machine:
  id: ~
  hostname:    {type: varchar(255)}
  ip:          {type: varchar(255)}
  service_tag: {type: varchar(255)}

Статья по многостолбцовым ограничениям заставляет меня задуматься, можно ли добавить что-то вроде required(hostname, mac, service_tag).Если это так, как бы я сделал это в форме .yml для Propel?

Ответы [ 3 ]

0 голосов
/ 18 августа 2011

Рассмотрим этот запрос:

SELECT *
  FROM machine
 WHERE hostname IS NULL
       AND ip IS NULL
       AND service_tag IS NULL;

Если этот набор результатов не является пустым набором, то бизнес-правило было нарушено. Поэтому создайте ограничение или триггер, который проверяет это.

0 голосов
/ 18 августа 2011

Я думаю, что это невозможно с Symfony и Propel.Но вы можете настроить форму Symfony так, чтобы она содержала один из трех столбцов.

0 голосов
/ 18 августа 2011

At least one of these [three] fields is required

Вы можете объединить три, сначала преобразовав ноль в пустую строку:

           CONCAT(   ifnull(host,'') , ifnull(ip,'') , ifnull(tag,'')  )

, а затем это ограничение:

         length(   CONCAT(   ifnull(host,'') , ifnull(ip,'') , ifnull(tag,'')  )  ) > 0

, если mySQL поддерживает проверочные ограничения.

...