Разработка таблицы SQL с иерархией / подкатегориями
У меня есть таблица, которая выглядит примерно так:
ID | Ключевое слово Категория | Подкатегория | Подкатегория | Sub-Sub-Sub Категория
Нужно ли разделить его на две таблицы (таблица ключевых слов и таблица категорий с родительским идентификатором), если одно ключевое слово может принадлежать только одной категории, подкатегории... и т. Д. Это означает, что нет повторений. есть ли еще необходимость разделить его?
5 ответов
Вам нужна только одна таблица для отображения 1-1. Для отображения отображений 1-многие или многие-многие следует использовать несколько таблиц.
Если ключевое слово может соответствовать только одной категории / подкатегории / подкатегории, ваш текущий макет должен быть в порядке.
Одно предостережение: если вы хотите искать по ключевому слову, может быть повышение производительности для разделения таблиц. Это намного быстрее, чтобы выполнить целочисленный поиск.
Обсуждение сохранения значений ключевых слов в другой таблице примерно соответствует обсуждению сохранения названий стран (которые в основном являются статическими) в другой таблице. Некоторыми ключевыми преимуществами использования другой таблицы могут быть такие вещи, как (разговорная) языковая независимость, быстрый поиск и простота обновления в дальнейшем.
Я бы сделал это в двух таблицах с каждым внешним ключом из таблицы Categories:
Keywords
id (PK)
keyword
category_id (FK)
Categories
category_id (PK)
category
parent_category_id (FK)
Данные в таблице категорий будут выглядеть так:
category_id category parent_category_id
1 Food null
2 meat 1
3 organic 1
4 fruit 3
и эти данные в таблице Ключевые слова будут выглядеть так:
id keyword category_id
1 grapes 4
2 chicken 2
Возможно, имеет смысл разделить его, если вы собираетесь переименовать или перегруппировать ваши категории позже:
- если вы оставите все как есть, вам придется выполнить этот шаг переименования / реорганизации (изменение полей категории / подкатегории / под-подкатегории / под-под-подкатегории) для каждой строки в этой таблице, содержащей эта (((под) под) под) категория. это приводит к более сложному запросу, и если в этой таблице ключевых слов очень много строк, это может быть проблемой производительности (= база данных займет некоторое время); с другой стороны, запросы (чтение) будут максимально быстрыми.
- если вы разделите его, то обновление (((под) под) под) категории будет выполняться только для меньшего количества строк, но запрос (чтение) займет больше времени, поскольку он должен работать с двумя (или более) таблицами.
Взвесьте все за и против, а затем примите решение.
Я бы использовал две таблицы, как это.
Categories
-------------------
PK,FK1 | CategoryID
| Keyword
| Category
SubCategories
--------------------
PK,FK1 | CategoryID
PK,FK1 | SubCategoryID