我想在SQLite中创建两个表Category
和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
中的所有产品,诸如此类。
答案 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';