2014-08-05 3 views
1

Извините за смутное название. Пример: Я предполагаю, что у SO есть одна большая таблица, в которой перечислены все ответы, в схеме вроде: [Ques No, Ans No, Text, Points] [22, 0, «Win», 3], [ 22, 1, «Tin», 4], [23, 0, «Pin», 2]Схема DB: Почему бы не создать новую таблицу для каждой «сущности»?

Мой вопрос: было бы лучше, если бы были две таблицы: Table_Ques22 и Table_Ques23? Может кто-нибудь прокомментировать плюсы и минусы?

Что приходит мне в голову: Недостатки нескольких таблиц: Накладные расходы на хранение мета. Плюсы нескольких таблиц: Быстро отвечайте на запросы вроде, найдите все ответы на Ques 22. (Я знаю, что есть индексы, но они требуют времени для создания и сохранения пространства).

+0

Вы, как правило, создаете схему базы данных для поддержки более одного запроса. Да, очень быстро найти ответы на вопрос. Попробуйте написать запрос, чтобы найти все ответы определенного пользователя. –

+0

Не бойтесь индексов, их затраты обычно завышены. –

ответ

4

Базы данных предназначены для обработки больших таблиц. Наличие нескольких таблиц с одинаковой структурой создает множество проблем. Они приходят на ум:

  • Запросы, которые охватывают несколько строк («вопросы» в вашем примере), становятся намного сложнее, и производительность страдает.
  • Сохранение подобных объектов является громоздким. Добавление индекса или разбиение на одну таблицу - это одно. Делать это на сотни столов намного сложнее.
  • Поддержание триггеров является громоздким.
  • Когда появляется новая строка (новый вопрос), вы должны нести накладные расходы на создание таблицы, а не просто добавлять к существующей таблице.
  • Изменение таблицы, скажем, чтобы добавить новый столбец или переименовать существующий, очень громоздко.

Несмотря на то, что все вопросы, заданные в одной таблице, используют небольшую дополнительную память, вы должны балансировать это с накладными расходами, имея очень маленькие таблицы. Таблица с данными должна занимать хотя бы одну страницу данных, независимо от того, являются ли данные 10 байтами или 10 Гбайтами. Если страница данных составляет 16 килобайт, то это много потерянного пространства для поддержки нескольких таблиц для одного объекта.

Что касается пределов базы данных. Я даже не уверен, что база данных может поддерживать отдельную таблицу для каждого вопроса в Stack Overflow.

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

+2

Отличный ответ, возможно, вы также можете указать разбиение – Adrian

0

О: Серверы SQL не предназначены для людей, игнорирующих основы реляционных теорей.

У вас есть тонна проблем с кросс-вопросительными вопросами в вашей части, что полностью уничтожит все выгоды. Типичная ошибка начинающего - я предлагаю хорошую книгу об основах SQL.

+2

На самом деле это не ответ скорее как комментарий; во всяком случае, вы упоминали хорошую книгу SQL, возможно, вы поделитесь ссылкой с user247077 – Adrian

+0

Конечно, Google.com. MSDN.Microsoft.com - документация неплохая.SQL для DUmmies, как всегда, книги с манекенами неплохие. – TomTom

Смежные вопросы