Когда нам нужно использовать отношения 1 к 1 в дизайне базы данных? - PullRequest
6 голосов
/ 15 июня 2011

Когда нам нужно использовать отношение 1 к 1 при проектировании базы данных?По моему мнению, если две таблицы находятся в отношении 1: 1, их можно объединить в одну таблицу.Это правда?

Ответы [ 4 ]

10 голосов
/ 15 июня 2011
  1. Вертикальное разбиение для больших таблиц для снижения требований к вводу-выводу и кэш-памяти - отдельные столбцы, которые часто запрашиваются, редко встречаются.

  2. Добавление столбца вПроизводственная система, когда alter table «слишком дорогой».

  3. Супертип / подтип шаблон.

  4. Вертикальное разбиение, чтобы извлечь выгоду из исключения таблиц (объединений) - при условии, что оптимизатор поддерживает его (опять же, чтобы уменьшить ввод / вывод и кэш).

  5. Моделирование якоря - аналогично 4, но до 6NF .

1 голос
/ 15 июня 2011

Иногда это полезно для блокировок таблицы.Когда вы добавляете столбец в базу данных, вся таблица блокируется, пока не будет полностью перезаписана.Это не имеет никакого влияния, когда ваша база данных имеет 100 тыс. Строк.Но если у вас 100M строк или 1B строк, это совсем другая история ...

Также полезно избегать мертвых строк, которые занимают слишком много места.Если вы используете MVCC и некоторые из ваших столбцов регулярно перезаписываются, иногда имеет смысл поместить их в отдельную таблицу.Можно утверждать, что автоматическая очистка в конечном итоге срабатывает, но ради экономии работы с жестким диском лучше собирать несколько полей int в отдельной таблице, чем целую кучу целых строк, заполненных текстом, varchar (n) и кто знает что еще.

Последней причиной будет злоупотребление select * в ORM.Например, если вы храните изображения или сообщения / статьи в блоге, имеет смысл сохранить поле blob / text в отдельной таблице.Потому что каждый раз, когда он загружается по той или иной причине, ваш ORM будет загружать всю строку.Когда вам нужен только URL-адрес вашего изображения или сообщения, последнее, что вам нужно, это извлечь весь двоичный файл / текст из базы данных;и все же ваш ORM сделает именно это ...

0 голосов
/ 15 июня 2011

Одной из причин может быть помещение часто используемых данных в одну таблицу и крайне редко используемых данных в другую таблицу. Он будет работать быстрее и сэкономит память.

Но мне пришлось бы сильно сжать руку, прежде чем я это сделаю.

0 голосов
/ 15 июня 2011

да вообще.

Единственное исключение может быть, если вы хотите по-разному назначать привилегии подмножеству столбцов.

также учтите, что это верно только тогда, когда требуются обе стороны.

...