2017-06-08 20 views
1

こんにちは素晴らしいStackoverflowrians!製品に少なくとも1つのカテゴリがあることを確認してください

私はこの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) 
); 

を製品に複数のカテゴリを追加できます。 create tableクエリの面白い質問のポップアップを書き留めています。

私はそれが可能であるかどうかはわかりませんが、すべての製品が少なくとも1つのカテゴリに割り当てられていることを確認する方法を見つけようとしています。何か案は?

+0

は、データベースではなくアプリケーションによって処理されるべきですか? – maSTAShuFu

答えて

0

すべての製品は、少なくとも一つのカテゴリであることを保証する一つの方法は、製品表の「主」のカテゴリを持つことです。

primary_categoryid int not null references categories(cat_id) 

これは、他のカテゴリから「違う」の主区分を行いません、 product_categoriesテーブルにないためです。

product_categoriesに行が必要な解決策を実行しようとすると、問題が発生します。 product_categoriesの行は、有効な製品を参照する必要がありますが、カテゴリを持つまで、製品は(定義によって)有効ではありません。

関連する問題