#mysql #sql #django-models #database-normalization
#mysql #sql #django-модели #нормализация базы данных
Вопрос:
Предположим, у меня есть таблица с именем «студент» с одним столбцом «имя». И я хочу сохранить второй атрибут с именем «group». «группа» будет значением, вычисляемым по имени, и в одной группе могут быть разные имена. Таким образом, у каждого имени есть группа, а у группы может быть много имен. Это можно легко смоделировать в нормализованной схеме, создав вторую таблицу с именем «group» и добавив столбец fk в «student», который указывает на «group». Однако предположим теперь, что я могу вычислить группу учащихся только через некоторое время после их регистрации. Поэтому мне нужно иметь возможность вводить учащегося, не зная его группы. С этой схемой мне придется либо использовать null fk, либо не добавлять student.
Прошу прощения, если я упускаю очевидное, я несколько новичок в нормализации. То, что я рассмотрел, — это использование ассоциативной таблицы с fk для group и fk для student. Это позволило бы мне вводить студентов, не зная их групп, а затем связывать их с их группами через ассоциативную таблицу на более позднем этапе. Но из того, что я прочитал об ассоциативных таблицах, вы должны использовать их для деконструкции отношений «многие ко многим». И это отношение «один ко многим». Так что я в замешательстве. Существует ли стандартный способ нормализации такого отношения «многие к одному», когда значение может быть вычислено только позже?
Комментарии:
1. Что не так с обнуляемым fk?
Ответ №1:
Довольно распространенный способ решить эту проблему — просто иметь запись «без группы» в таблице групп. Все учащиеся сначала сопоставляются с этой записью, а затем вы обновляете внешний ключ, когда они назначаются группе.