Базовый дизайн базы данных. Используйте другой стол или столб - PullRequest
2 голосов
/ 21 января 2010

У меня есть таблица, которая содержит информацию о конкретном объекте, скажем Item и содержит столбцы

ItemID, ItemName, цена, ItemListingType ..... LastOrderDate

Один из битов информации, ItemListingType может быть одним из 10 различных типов. такие как:

private, gov, non-gov, business ... и т. Д. (Строки) и может быть расширен в будущем на другие типы.

Должен ли я использовать столбец внутри таблицы ITEM или я должен использовать отдельную таблицу с двумя столбцами и поместить внешний ключ в таблицу Item для ссылки на это (отношение один ко многим)? Как:

  • ListingTypeID int

  • ListingTypeName varchar (MAX)

РЕДАКТИРОВАТЬ: сколько значений для столбца, вы рассмотрите использовать другую таблицу для этого

2, 4 или как?

Спасибо

Ответы [ 6 ]

8 голосов
/ 21 января 2010

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

3 голосов
/ 21 января 2010

Отдельная таблица.

  • Что делать, если у вас еще нет типа листинга?
  • Или удалить последний элемент с типом x?
  • Или нужно изменить значение?

Это вставка, обновление и удаление аномалий , что является одной из причин нормализации

2 голосов
/ 21 января 2010

Вы должны сделать это со второй таблицей, которая содержит ListingTypes и ссылку на идентификатор этой таблицы из таблицы с объектами ...

Взгляните на Реляционная база данных и Реляционная модель .

2 голосов
/ 21 января 2010

Я бы определенно выбрал колонку в стиле «поиск»; Таким образом, вы не будете в тупике, когда будущие дополнения к списку допустимых типов списков. Вы также сокращаете избыточность и облегчаете изменение обозначения конкретного типа листинга (если «gov» меняется на «правительственные учреждения», вам нужно изменить его только в одном месте).

1 голос
/ 21 января 2010

В подобных ситуациях я спрашиваю себя: Может ли Предмет иметь неопределенное количество типов Листинга? Если да, то другая таблица.

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

Будет ли пункт ВСЕГДА иметь один тип листинга? Если да, та же таблица, один столбец.


Теперь, чтобы сделать еще один шаг вперед. Если Элемент имеет ноль или более типов листинга И эти типы листинга фактически являются общими (другими словами, два элемента могут иметь один и тот же тип листинга, тогда у нас есть 3 таблицы: Items, ListingTypes и таблица перекрестных ссылок для поддержки многих ко многим отношения.

0 голосов
/ 21 января 2010

Классически, вы должны использовать дополнительную таблицу, потому что у вас не будет никакого дублирования таким образом. Это также позволит вам изменить значение для этого списка в одном месте. Однако, если вы очень уверены, что никакие типы не будут добавлены, оставьте столбец.

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