我的问题很简单,但我找不到任何解决方案。假设我有以下内容:
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]
我现在想要从table food到table fruits + vegetables建立一个外键约束,具体取决于category_id中指定的类别。这可能吗?
答案 0 :(得分:1)
如果您的问题非常简单,那么只需使用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个条目,则使用带有FOREIGN KEY CONSTRAINT的DOMAINS或外部表。
答案 1 :(得分:0)
外键只能引用主键或唯一键。你的food.food_id
都不是。这是技术方面。从架构设计的角度来看,我不确定你的目的是否有太多的表。
答案 2 :(得分:0)
我将你的模型更改为:
Table food:
id (key);
name;
category_id;
Table category:
category_id (key);
category_names [fruits, vegetables]
我不明白为什么你需要一个水果和蔬菜的桌子,除非这些桌子与其他桌子有不同的关系..
您还可以阅读有关modeling subclasses in a database
的页面祝你好运!