В моем проекте у меня 3 уровня.

  1. категория
  2. подкатегория
  3. товар

В таблице продуктов у меня есть внешний ключ подкатегории, а в подкатегории - внешний ключ категории. если мне нужна категория продукта, я извлекаю subcategory_id для сравнения с категорией и т. д. но это длинный метод для n, как я проектирую свою базу данных для уровня n. Метод i заключается в том, что я помещаю идентификатор категории и подкатегории в качестве внешнего ключа, но лично мне это не нравится. любая другая логика дизайна, концепция или запрос. введите описание изображения здесь

-1
Bilawal shah 15 Янв 2021 в 12:34

2 ответа

Лучший ответ

Здесь вы можете использовать следующую структуру таблиц:

  1. Таблица категорий (каждая категория имеет собственный идентификатор, имя и возможный идентификатор родительской категории): например, код MySQL
    CREATE TABLE Categories (
        id int primary key auto_increment,
        name varchar(64),
        parent_id int
    );
  1. Таблица товаров с внешним ключом для категорий:
    CREATE TABLE Products (
        id int primary key auto_increment,
        name varchar(64),
        category_id int,
        foreign key (category_id) references Categories (id)
    );

Эта структура БД дает вам возможность не ограничивать подкатегории только с двумя таблицами.

Здесь где он может быть протестирован в реальном времени

0
Slava Rozhnev 15 Янв 2021 в 17:58

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

Итак, для Oracle:

CREATE TABLE products (
  id          NUMBER(12,0)
              GENERATED ALWAYS AS IDENTITY
              CONSTRAINT products__id__pk PRIMARY KEY,
  name        VARCHAR2(50)
              NOT NULL,
  category_id NUMBER(12,0)
              CONSTRAINT products__category_id__fk REFERENCES products ( id )
)
0
MT0 15 Янв 2021 в 09:48