Как создать две таблицы в отношениях, используя SQLite - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу создать две таблицы Category и Product в SQLite.Таблица категорий должна быть родительской, а таблица Product - дочерней.Я создал две таблицы таким образом, и я не знаю, что это хороший подход:

CREATE TABLE Category (
    id BIGINT PRIMARY KEY,
    category_name VARCHAR,
    category_description VARCHAR,
    image_path VARCHAR
):

CREATE TABLE Product (
    product_id integer PRIMARY KEY,
    product_name VARCHAR,
    product_description VARCHAR,
    product_numberOfProduct integer,
    product_image_path VARCHAR,
    product_price integer,
    category_id integer NOT NULL,
    FOREIGN KEY (category_id) REFERENCES Category(id)
);

Я хочу создать запрос для поиска по всем продуктам из category_name и что-то в этом роде.

1 Ответ

0 голосов
/ 19 февраля 2019

Ваш подход на почти месте.Основной недостаток вашего решения заключается в том, что если данный продукт может принадлежать более чем к одной категории, то ваша схема будет дублировать все метаданные этого продукта для каждого отношения продукта-категории.Стандартный способ справиться с этим - создать третью соединительную таблицу, которая в основном существует для хранения отношений между продуктами и их категориями.Таким образом, ваша таблица соединений может выглядеть примерно так:

CREATE TABLE Product_Category (
    product_id integer,
    category_id integer,
    PRIMARY KEY (product_id, category_id)
)

Из вашей текущей таблицы Product вы бы удалили ссылку на category_id.

В качестве примера запроса, еслиВы хотели бы узнать все названия категорий данного продукта, вы можете попробовать:

SELECT
    c.category_name
FROM Category c
INNER JOIN Product_Category pc
    ON c.id = pc.category_id
INNER JOIN Product p
    ON pc.product_id = p.product_id
WHERE
    p.product_name = 'some product name';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...