Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 取决于第二个外键的外键_Postgresql_Foreign Keys - Fatal编程技术网

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
的主键,并从“子表”中引用它。你可以在同一个字段中有主键和外键。不,我的问题不是那么简单。也许我的食物例子没那么好。我是一个数据库初学者,现在我发现类别和水果/蔬菜之间的多对多关系是我想要的,其中食物表充当关联表。谢谢大家的帮助!