如何使用SQLite在关系中创建两个表

时间:2019-02-19 12:55:16

标签: sqlite

我想在SQLite中创建两个表CategoryProduct。 类别表应为父表,产品表应为子表。 我以这种方式创建了两个表,但我不知道这是一个好方法:

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 :(得分:0)

您的方法几乎是 。解决方案中的主要缺陷是,如果给定的产品可以属于多个类别,则您的架构将针对每个产品类别关系复制该产品的所有元数据。处理此问题的标准方法是创建第三个联结表,该联结表主要用于存储产品及其类别之间的关系。因此,您的联结表可能看起来像这样:

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