首页 > 解决方案 > 如何使用 SQLite 创建两个关系表

问题描述

我想在 SQLiteCategory中创建两个表。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以及类似的东西。

标签: sqlite

解决方案


你的方法几乎是正确的。您的解决方案中的主要缺陷是,如果给定产品可以属于多个类别,那么您的架构将为每个产品-类别关系复制该产品的所有元数据。处理这种情况的标准方法是创建第三个联结表,该联结表主要用于存储产品及其类别之间的关系。因此,您的连接表可能如下所示:

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';

推荐阅读