问题描述
|
我的问题很简单,但是找不到任何解决方案。可以说我有以下内容:
Table food:
id (key);
category_id;
food_id
Table category:
category_id (key);
category_names [fruits,vegetables]
Table fruits
food_id (key);
fruit [apple,banana]
Table vegetables
food_id (key);
vegetable [bean,carrot]
我现在想根据category_id中指定的类别,建立从餐桌食物到餐桌水果+蔬菜的外键约束。这可能吗?
解决方法
如果您的问题确实如此简单,则只需使用VIEWS:
CREATE TABLE food (
id SERIAL,name TEXT NOT NULL,category TEXT NOT NULL,PRIMARY KEY(id),CHECK(category = \'fruit\' OR category = \'veggie\')
);
CREATE UNIQUE INDEX food_name_udx ON food(name);
CREATE VIEW fruit AS
SELECT id,name FROM food WHERE category = \'fruit\';
CREATE VIEW veggie AS
SELECT id,name FROM food WHERE category = \'veggie\';
如果类别超过5-10个条目,请使用DOMAINS或带有FOREIGN KEY CONSTRAINT的外部表。
,外键只能引用主键或唯一键。您的food.food_id
都不是。那是技术方面。从架构设计的角度来看,我不确定是否可能有太多的表格供您使用。
,我将您的模型更改为此:
Table food:
id (key);
name;
category_id;
Table category:
category_id (key);
category_names [fruits,vegetables]
我看不到为什么您需要水果和蔬菜的桌子,除非那些桌子与其他桌子有不同的关系。
您还可以阅读有关在数据库中对子类建模的页面
祝好运!