Есть ли еще смысл нормализовать данные (1NF)? (что плохого в том, что в таблице есть пустые поля?) - PullRequest
0 голосов
/ 01 июля 2011

Учитывая, что дисковое пространство дешево, имеет ли смысл нормализовать данные (1NF) вместо того, чтобы хранить все это в одном месте для более быстрых запросов?

Справочная информация:

  1. У нас есть таблица пользователей - организаторов и участников мероприятия
  2. Оба имеют некоторые общие поля, но организаторы имеют гораздо больше полей
  3. Посетителей гораздо больше, чем организаторов наsite

Вопрос: (В далеком прошлом) Мы объединили отдельные существующие таблицы и превратили их в одну, похожую на следующую:

   Table_Users
   UID, Name, Email, CommonField1, OrgSpecificField1, OrgSpecificField2

Теперь у нас есть только однаобщая таблица для обоих типов пользователей.Для участников последние два поля имеют значение NULL.

Сравните приведенную выше структуру с:

   Table_Users
   UID, Name, Email, CommonField1

   Table_UsersOrganizers
   UID, OrgSpecificField1, OrgSpecificField2

, что потребует присоединения.Теперь, с точки зрения скорости сайта, что будет быстрее извлекать - общую интегрированную таблицу или отдельную таблицу?Помните, что мы будем постоянно получать эти записи.

Ответы [ 5 ]

1 голос
/ 01 июля 2011

Ответ - да, имеет смысл нормализовать данные в 1NF (и далее), несмотря на то, насколько дешевое дисковое пространство. В обычных ситуациях, когда вы нормализуетесь путем разложения одной таблицы на две или более таблиц, результат занимает больше места на диске, чем раньше.

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

1NF не имеет ничего общего с NULL. Набор таблиц может быть в 5NF (и, следовательно, в 1NF) и все еще содержать NULLS. Что касается самих NULL, то чем меньше сказано, тем лучше.

1 голос
/ 01 июля 2011

Нормализация - это целостность данных - точное представление реальности, которую вы пытаетесь смоделировать.Это никак не связано со стоимостью дискового пространства.Старайтесь быть как минимум в Бойсе-Кодде / 5-й нормальной форме, если только вы не найдете вескую причину не делать этого.

0 голосов
/ 01 июля 2011

да - сохранить в нескольких таблицах.

ваша производительность на самом деле будет лучше.

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

0 голосов
/ 01 июля 2011

Я предполагаю, что у вас действительно большой набор данных.

Есть два сценария, с которыми вы столкнетесь

  1. Выборка строк, имеющих только общие данные

  2. Выборка строк, которые имеют как общие, так и конкретные данные.

Если у вас есть одна таблица с пустыми столбцами, поиск данных может быть быстрым, так как у вас не будет никаких объединений. Но вы можете захотеть использовать 'isnull' в каждом запросе, который вы запускаете с определенными столбцами в них.

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

0 голосов
/ 01 июля 2011

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

...