你好精彩的Stackoverflowrians!
我有这个DB diagram,我有这个postgresql来创建表:
CREATE TABLE products (
prod_id serial PRIMARY KEY,
name varchar(150) NOT NULL,
description text,
purchase_price numeric(10,2) NOT NULL,
selling_price numeric(10,2) NOT NULL,
weight numeric(10,2),
min_quantity int NOT NULL
);
CREATE TABLE categories (
cat_id serial PRIMARY KEY,
name varchar(100),
parent int REFERENCES categories ON DELETE CASCADE
);
CREATE TABLE product_categories (
prod_id int NOT NULL REFERENCES products,
cat_id int NOT NULL REFERENCES categories,
PRIMARY KEY (prod_id, cat_id)
);
如您所见,我有多个子类别,产品和表格的类别,以便在它们之间建立关系,因此我可以为产品分配多个类别。 在写下创建表时,我会在脑海中查询有趣的问题弹出窗口。
我不确定它是否可能,但是,我试图找到一种方法来确保每个产品都分配到至少一个类别。有什么想法吗?
答案 0 :(得分:0)
确保每个产品至少属于一个类别的一种方法是在产品表中使用“主要”类别:
primary_categoryid int not null references categories(cat_id)
这确实使主要categoryid与其他类别“不同”,因为它不在product_categories
表中。
如果您尝试在product_categories
中需要一行的解决方案,那么您就遇到了问题。 product_categories
中的行需要引用有效的产品 - 但产品无效(按照您的定义),直到它有一个类别。