У меня есть стол items (id, varchar name)
. Я хотел бы создать способ группировки item
в группы. Каждый item
должен быть ровно в одном group
. Каждая группа должна иметь хотя бы одну item
, возможно, несколько. Каждый group
должен иметь ровно один из item
, обозначенных как специальные, и этот item
должен быть членом этого group
. Должна быть возможность выбрать любой item
в качестве выбранного item
, а также можно изменить, какой item
из group
является выбранным.
Я использую последнюю версию из MySQL, таблица items
использует InnoDB.
Как я могу кодировать эти ограничения в SQL дизайн? Я знаю, как создать ассоциативную таблицу n-к-1, но я не знаю, как кодировать часть «ровно один специальный элемент».
В моей текущей попытке используются таблицы group (id)
и
group_item (
id,
group_id,
item_id,
unique key item_id,
selected enum("selected") null,
unique key (group_id, selected)
)
но это не гарантирует, что выбран хотя бы один элемент, и я не уверен, что этот дизайн идет в правильном направлении.
К сожалению, я не могу найти хороший термин для поиска, чтобы найти литературу или код, который пытается реализовать такой дизайн - я потратил много времени на поиск в Google и в Stack Overflow, а также на несколько SQL книг.