确保产品至少包含一个类别

时间:2017-06-08 01:32:08

标签: sql postgresql

你好精彩的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)
);

如您所见,我有多个子类别,产品和表格的类别,以便在它们之间建立关系,因此我可以为产品分配多个类别。 在写下创建表时,我会在脑海中查询有趣的问题弹出窗口。

我不确定它是否可能,但是,我试图找到一种方法来确保每个产品都分配到至少一个类别。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

确保每个产品至少属于一个类别的一种方法是在产品表中使用“主要”类别:

primary_categoryid int not null references categories(cat_id)

这确实使主要categoryid与其他类别“不同”,因为它不在product_categories表中。

如果您尝试在product_categories中需要一行的解决方案,那么您就遇到了问题。 product_categories中的行需要引用有效的产品 - 但产品无效(按照您的定义),直到它有一个类别。