Должен ли я создать новую таблицу в моей базе данных для этого? - PullRequest
1 голос
/ 22 августа 2011

В моей базе данных, среди других таблиц, products. Таблица продуктов содержит идентификатор, имя, описание и некоторые другие данные о продукте. Я хочу добавить также категорию.

Должен ли я создать новую таблицу с именем category с идентификатором и именем каждой категории и включить в products a * category_id *, который будет относиться к идентификатору category, или же мне нужно название категории в каждом ряду products?

В первом случае мне придется использовать JOIN. Повлияет ли это на производительность?

Ответы [ 5 ]

4 голосов
/ 22 августа 2011

Определив категории в их собственной таблице, вы можете:

  • Переименовать категории
  • Динамически генерировать списки категорий для выбора из
  • Добавить описания категорий
  • Добавление новых категорий

… и т. Д. Без необходимости обновлять каждый бит кода, связанного с категорией, каждый раз, когда вы их изменяете.

Так что да, добавьте таблицу.

Повлияет ли это на производительность?

Вероятно, нет.

1 голос
/ 22 августа 2011

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

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

1 голос
/ 22 августа 2011

Да, вы должны держать свои данные в норме. Я думаю, хорошая идея - создать новую таблицу с именем category.

0 голосов
/ 22 августа 2011

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

Присоединение, скорее всего, не повлияет на производительность, но если вам это не нужно сейчас, постарайтесь не стать жертвой слишком-дизайн.

0 голосов
/ 22 августа 2011

Стандартный ответ: «Это зависит» Это зависит от того, как данные используются, будут использоваться, могут быть использованы. Но как только вы пройдете через все обсуждения и споры, что-то столь простое и заметное в ваших данных, в девяти случаях из восьми вам будет лучше правильно нормализовать данные (т. Е. Таблица категорий, столбцы CategoryId и внешний ключ).

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