Хранение категорий в базе данных

#database #database-design #relational-database

#База данных #база данных-дизайн #реляционная база данных

Вопрос:

Если какой-либо объект может быть video, audio, или story , лучше ли иметь отдельную таблицу для каждой категории или нормально иметь "type" поле, содержащее множество "audio" , "video" и "story" записей?

1) ПРЕДПОЛОЖИМ, что каждый объект может быть только одного типа

2) ПРЕДПОЛОЖИМ, что каждый объект может быть нескольких типов (в этом случае лучше всего определить таблицу ObjectType, в которой хранятся отношения между объектами и типами, верно?)

(Я использую реляционную базу данных)

Спасибо!

Комментарии:

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

2. Может ли элемент находиться более чем в одной категории? Видео также может быть историей, не так ли?

3. @Будет хорошим аргументом… я отредактирую вопрос, чтобы отразить эту проблему.

Ответ №1:

Предлагаемые схемы ниже. Используя идентификаторы, а не строки, вы уменьшаете объем хранилища и усилия, требуемые ядром базы данных при объединении. Вы также значительно упрощаете переименование категории — вместо того, чтобы обновлять множество строк, где используется категория, вы обновляете одну строку КАТЕГОРИИ.

Только с одной категорией на элемент:

 ITEM:
ID
CATEGORYID
...

CATEGORY:
ID
NAME
...
  

С несколькими категориями для каждого элемента:

 ITEM:
ID
...

CATEGORY:
ID
NAME
...

ITEMCATEGORY:
ITEMID
CATEGORYID
  

Комментарии:

1. Спасибо, это подтверждает то, что я думал о второй категории. Спасибо, что указали на сложность изменения названия категории без использования идентификаторов

2. С удовольствием, AC — в долгосрочной перспективе это принесет дивиденды, если вы также установите внешние ключи на место.

3. Важно не «усилие» (если только это не может быть доказано , что это проблема), а скорее обеспечение согласованности и удобства использования базовой реляционной модели — а это невозможно без FK (использование суррогатных PK в стороне).

4. @pst — согласовано, хранение усилия отходят на второй план по сравнению с основной проблемой простоты обслуживания.