Я понимаю, как спроектировать схему базы данных, которая имеет простые отношения «один ко многим» между ее таблицами. Я хотел бы знать, что такое соглашение или лучшая практика для определения одного конкретного отношения в этом наборе в качестве основного. Например, один человек имеет много кредитных карт. Я знаю, как смоделировать это. Как бы я обозначил одну из этих карт в качестве основной для этого человека? Решения, которые я придумаю, кажутся в лучшем случае не элегантными.
Я постараюсь прояснить мою реальную ситуацию. (К сожалению, фактический домен просто запутает вещи.) У меня есть 2 таблицы с множеством столбцов, скажем, Person и Task. У меня также есть проект, который имеет только несколько свойств. Один человек имеет много проектов, но имеет основной проект. Один проект имеет много задач, но иногда имеет одну основную задачу с альтернативами, а в других случаях нет основной задачи, а вместо этого последовательность задач. Нет задач, которые не являются частью проекта, но это строго не запрещено.
PERSON (PERSON_ID, NAME, ...)
TASK (TASK_ID, NAME, DESC, EST, ...)
PROJECT (NAME, DESC)
Кажется, я не могу найти способ смоделировать основной Проект, основную Задачу и последовательность Задач одновременно, не вводя ни слишком сложного, ни чистого зла.
Это лучшее, что я придумал до сих пор:
PERSON (PERSON_ID, NAME, ...)
TASK (TASK_ID, NAME, DESC, EST, ...)
PROJECT (PROJECT_ID, PERSON_FK, TASK_FK, INDEX, NAME, DESC)
PERSON_PRIMARY_PROJECT (PERSON_FK, PROJECT_FK)
PROJECT_PRIMARY_TASK (PROJECT_FK, TASK_FK)
Это просто слишком много таблиц для простой концепции.
Вот вопрос, который я нашел, который имеет дело с очень похожей ситуацией: Дизайн базы данных: круговая зависимость .
К сожалению, по-видимому, не было единого мнения о том, как справиться с ситуацией, и «правильным» ответом было отключение механизма проверки целостности базы данных. Не круто.