Это сложный вопрос, с множеством разных мнений, но я бы сказал, что вы правильно делите свои отношения на две отдельные модели.
Однако есть несколько соображений, которые необходимо принять во внимание. account.
Если смотреть на это с точки зрения дизайна базы данных, вряд ли есть какая-либо причина разделять таблицы базы данных. Всякий раз, когда есть отношения один-к-одному, вы должны объединить их в одну таблицу. Количество столбцов вряд ли имеет значение, если вы не оптимизируете свою базу данных.
Ответ на этот вопрос довольно неплохо суммирует реальные физические причины разделения отношения 1: 1:
- Вы можетехотите по-разному кластеризовать или разбить две таблицы «конечных точек» отношения 1: 1.
- Если ваша СУБД позволяет это делать, вы можете разместить их на разных физических дисках (например, более критично для производительности на SSD). а другой - на дешевом жестком диске).
- Вы измерили влияние на кеширование и хотите убедиться, что «горячие» столбцы хранятся в кеше, а «холодные» столбцы не «загрязняют» его.
- Вам необходимо поведение параллелизма (например, блокировка), которое «уже», чем весь ряд. Это сильно зависит от СУБД.
- Требуется разная защита для разных столбцов, но СУБД не поддерживает разрешения на уровне столбцов.
- Триггеры, как правило, зависят от таблицы. Хотя теоретически вы можете иметь только одну таблицу и триггер игнорирует «неправильную половину» строки, некоторые базы данных могут накладывать дополнительные ограничения на то, что триггер может и не может делать. Например, Oracle не позволяет вам изменять так называемую «мутирующую» таблицу из триггера уровня строки - имея отдельные таблицы, только одна из них может изменяться, поэтому вы все равно можете изменить другую из своего триггера (но естьдругие способы обойти это).
Базы данных очень хороши для манипулирования данными, поэтому я бы не разбивал таблицу только для производительности обновления, , если у вас не установлено выполнил фактические тесты репрезентативных объемов данных и пришел к выводу, что разница в производительности действительно существует и достаточно значительна (например, чтобы компенсировать возросшую потребность в присоединении).
точка зрения Джанго
Если выПосмотрите, как устроен Django, есть смысл разделить ваш стол на отношения один к одному. Одна из философий дизайна Джанго - «Слабая связь» . Что в экосистеме Django означает, что отдельным приложениям не нужно знать друг о друге для правильной работы. В вашем случае можно утверждать, что модель Студента не должна ничего знать о своих тестах IELTS, потому что если вы разделите эти два, модель Студента может быть повторно использована в каком-то другом приложении. Кроме того, некоторые функции, которые выполняют какой-то анализ по тестам IELTS, не должны «знать» что-либо о студенте, который прошел этот тест.
Однако используйте этот шаблон проектирования с некоторой осторожностью. Хороший вопрос, который нужно задать себе, не обязательно должен быть «Как столбцы могут быть в моей модели?», Потому что иногда есть веская причина иметь много данных в одной модели. Так что ответ «да» на один этот вопрос не обязательно заслуживает разделения ваших столов. Лучше задать себе вопрос: «Хочу ли я разделить обязанности / функциональность этих двух типов данных?», Что может быть по любой причине, например, возможность повторного использования или безопасность.