2015-04-16 2 views
0

У меня есть таблица daily_ward запись со следующими столбцамиКак определить составной уникальное ограничение в MySQL

daily_ward 
------------- 
services integer 
ipd_patient_id integer 
date_time datetime 

Теперь я хочу, чтобы ограничить одну запись в день для услуг, где услуги = 1.

В поле date_time также содержится время, и службы содержат много сервисов.

Как таковой, я не могу сразу добавить уникальный индекс.

Как мне это сделать?

+2

'alter table daily_ward добавить уникальный unique_index (?,?);'? – potashin

ответ

1

О, это так грустно. Вы не можете сделать это в MySQL, используя типы данных, которые у вас есть. Вот три варианта.

Первый разделить дату и время на две колонки:

  • дата дата
  • Время в

(Вы должны предоставить лучшие имена.) Затем создать уникальный индекс на столбцы services и date.

Во-вторых, для хранения даты/времени в стандартном формате ISO: "YYYY-MM-DD HH: MM: SS" обычно достаточно:

  • datetime_str символ (19)

Затем построить индекс, используя префикс:

create unique index idx_daily_ward_services_day on (services, left(datetime_str, 10)); 

Наконец, вы можете добавить еще один столбец date и заполнить его с помощью триггера.

Учитывая, что имя таблицы «daily_ward», я был бы склонен идти первым решением. «Дата» представляется важной частью того, что представляет сущность.

Смежные вопросы