2015-02-20 2 views
0

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

Задачи был что-то вроде этого,
вещей у меня уже естьЧто важнее скорость (время) или пробел

  • стола «Пользователь», которые содержат сведения о пользователе. Как createdTime, тип (агент, администратор, другой), идентификатор и т.д.. (Эта таблица содержит слишком много строк (записи) в ней)

Задача, для меня это

  • создайте новую таблицу, которая будет отслеживать пользователя, который удаляется.
  • Затем присоединитесь к таблице «Пользователь» с этой вновь созданной таблицей и покажите пользователю, который еще не удален и имеет тип = «агент».

Теперь мой вопрос

  • «почему они просят меня, чтобы создать новую таблицу вместо того, чтобы создать новый столбец (в таблице User), который будет хранить флаг (правда, если пользователь удаляется, а не удаляется).
  • «Соединяем много времени?»
  • (создание нового столбца в текущей таблице «Пользователь» поможет сохранить деталь неповрежденной с пользователем. Но создание новой таблицы - где это поможет?)

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

Это говорит о том, что он все больше и больше заботится о пространстве во время запроса.
В настоящее время мы можем получить любое количество пространства с деньгами, но скорость важнее. Если скорость меньше, то какая польза от чего-то, что экономит дисковое пространство.
Разве мы не должны заботиться о времени больше и пространстве меньше ?.

Я хотел бы знать, что вы думаете об этом. Что для вас важнее и почему ?.
Я знаю, что этот вопрос может быть пропущен, но я хотел знать, что думают большинство разработчиков в таком случае. Чем они больше заботятся, это пространство или время?
Спасибо за ваше время.

ответ

0

Это будет ответ, даже если он лично говорил, потому что это слишком большой для комментариев:

Два редко отделяются друг от друга, а функция друг от друга.

Скорость также не просто «время запроса», но в основном время выполнения, включая обработку данных. От запроса до ответа.
Итак, если у вас есть что-то такое, что у вас есть пробелы, у вас больше операций ввода-вывода и большего объема памяти, и вам нужно потратить больше времени на доступ к данным и больше времени на передачу данных. Итак, мой «ответ» будет:
Относитесь как к равным, так и к минимуму.

Это означает, что он все больше и больше заботится о пространстве во время запроса. :
Нет. Это неправильное предположение.

Если вы начинаете думать о нормализации и де-нормализации в базе данных, когда думаете о производительности, вам лучше всего лучше нормализовать данные. Это не только для экономии места, но и для сохранения обслуживания целостности данных/данных (более быстрое обновление, уменьшение блокировки); Индексирование (пробел, да - но и скорость), а затем при использовании переноса ввода-вывода данных с диска на сервер, использования памяти в разных сетях. Кроме того, использование пространства означает использование памяти, и чем больше вещей занимают место, тем больше вы хотите также поместить в память.

Все эти вещи приводят к производительности, а также скорости.

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

+0

Перемещение к дизайну с таким флагом не влияет на нормализацию как таковую. Таблицы отличаются друг от друга, поэтому запросы и ограничения отличаются для тех же результатов и целостности. Например, FK в таблицу удаленных идентификаторов становится FK плюс CHECK, который флаг указывает на удаление; но запрос для удаленных идентификаторов теперь не нуждается в ГДЕ на флаге. Такое изменение не оказывает особого влияния на нормализацию базовых таблиц. Поэтому «денормализованный» не является подходящим словом/понятием. Это означает что-то еще. То, что вы имеете в виду, - это значения, не являющиеся прямолинейными таблицами, с учетом различий (подтипов супертипа), важных в этом приложении ». – philipxy