Postgresql 取决于第二个外键的外键
我的问题很简单,但我找不到任何解决办法。假设我有以下几点:Postgresql 取决于第二个外键的外键,postgresql,foreign-keys,Postgresql,Foreign Keys,我的问题很简单,但我找不到任何解决办法。假设我有以下几点: 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, carr
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中指定的类别,构建一个从table food到tables Frients+Veestures的外键约束。这可能吗?外键只能引用主键或唯一键。你的
食物。食物id
两者都不是。这是技术方面的问题。从架构设计的角度来看,我不确定是否有太多的表用于您的目的。我将您的模型更改为:
Table food:
id (key);
name;
category_id;
Table category:
category_id (key);
category_names [fruits, vegetables]
我不明白你为什么需要一张水果和蔬菜的桌子,除非这些桌子与其他桌子有不同的关系
你也可以阅读这一页关于
祝你好运 如果您的问题真的那么简单,那么只需使用视图:
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个条目,请使用域或带有外键约束的外部表。我想引用主键:水果.食物id或蔬菜.食物id。。。取决于食品表中规定的类别。你认为,在这个例子中,我只能选择3张桌子?水果和蔬菜应该是两张完全不同的桌子。如你所愿。但是一个外键不能引用多个主键。您应该以相反的方式对其建模,即使
food\u id
成为food
的主键,并从“子表”中引用它。你可以在同一个字段中有主键和外键。不,我的问题不是那么简单。也许我的食物例子没那么好。我是一个数据库初学者,现在我发现类别和水果/蔬菜之间的多对多关系是我想要的,其中食物表充当关联表。谢谢大家的帮助!