Как мне решить, должны ли столбцы объединяться в одну таблицу или разбиваться на несколько таблиц? - PullRequest
2 голосов
/ 12 февраля 2010

мы всегда должны объединять таблицы один на один?

У меня есть идентификатор пользователя, таблица, содержащая основы:

uid, name, address, etc..

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

uid, stats, etc..

Должен ли я просто объединить их? когда это имеет смысл и когда я не хочу?

Ответы [ 3 ]

6 голосов
/ 12 февраля 2010

Проверьте этот ресурс в Пять нормальных форм для реляционных баз данных . В нем вы найдете некоторые рекомендации для принятия решения о том, как объединить информацию или разбить ее на таблицы.

В двух словах, используйте это правило:

  • Каждая таблица должна представлять один тип вещей.
  • Первичный ключ должен однозначно отличать эту вещь от других элементов в таблице.
  • Каждый столбец в таблице должен зависеть от значения первичного ключа и только от значения первичного ключа.
    • Если несколько полей в одной таблице образуют логическую подгруппу (например, части адреса), то они, вероятно, заслуживают своей собственной таблицы.
3 голосов
/ 12 февраля 2010

Имеет смысл хранить эти таблицы отдельно, когда будет очень распространено, чтобы поля во второй таблице не были заполнены, поэтому наличие второй таблицы позволяет вам сэкономить столько памяти на строку без заполнения этой информации.

В вашем примере, если только у нескольких пользователей будет «статистика и т. Д.», То может быть хорошей идеей сохранить эту информацию в отдельной таблице. Даже не создавайте строки для этих пользователей без этой информации.

1 голос
/ 12 февраля 2010

Отношение один к одному - это вещь, определяемая ER model.

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

  • Создание одной таблицы с атрибутами обеих сущностей. Полезно для строгих 1:1 отношений.

  • Создание одной таблицы для каждой сущности и ссылка на них в дополнительной таблице ссылок с ограничениями UNIQUE для обоих полей ссылок. Полезно для (0-1):(0-1) отношений и для добавления атрибутов к самим отношениям.

  • Создание одной таблицы для каждой сущности и ссылки на одну таблицу из другой с использованием ограничения FOREIGN KEY для поля UNIQUE. Полезно для 1:(0-1) отношений.

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

Вы можете прочитать эту статью в моем блоге:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...