sqlite3 — создание уникальной комбинации двух записей

#arrays #sqlite #unique

#массивы #sqlite ( код ) #уникальный #sqlite

Вопрос:

Таблица:

 Car | Year | Colour
---------------
=
BMW  | 2013  | Black

Benz | 2011  | Red

BMW  | 2011  | Orange
  

Как вы можете видеть, ни столбцы «Автомобиль», ни «Год выпуска» не являются уникальными. Но как я могу сделать комбинацию Car и Make уникальной, чтобы эта таблица не принимала никаких других записей (BMW, 2013, whatever_colour)?

Ответ №1:

Вы можете сделать либо:

 CREATE UNIQUE INDEX ON TableName(Car,Year)
  

или вы можете заново создать таблицу с PRIMARY KEY включением (Car, Year) . Если у вас есть другие таблицы, которые идентифицируют модели с Car, Year комбинацией, и вы хотите убедиться, что эти пары сверяются с основной таблицей, PRIMARY KEY это предпочтительное решение (с совпадающими FOREIGN KEY таблицами, объявленными в другой таблице (ах)).

Комментарии:

1. Но если я уже использовал ПЕРВИЧНЫЙ КЛЮЧ для ID, могу ли я иметь другой ПЕРВИЧНЫЙ КЛЮЧ в таблице? например, «СОЗДАТЬ ЗАГОЛОВКИ ТАБЛИЦ (ИДЕНТИФИКАТОР ЦЕЛОГО ПЕРВИЧНОГО КЛЮЧА НЕ равен НУЛЮ, ПЕРВИЧНЫЙ КЛЮЧ (ЗАГОЛОВКИ, ЕДИНИЦА измерения)»? Спасибо за помощь, Ларри 🙂

2. Нет, только один ПЕРВИЧНЫЙ КЛЮЧ. Итак, в этом случае вы будете использовать решение с УНИКАЛЬНЫМ индексом, которое разрешено. Вы могли бы также рассмотреть возможность отказа от столбца ID вместо «интеллектуального» ПЕРВИЧНОГО КЛЮЧА на (автомобиль, год), хотя многие разработчики предпочитают решение ID.