如果存在于表中,则强制输入

时间:2016-03-18 21:12:13

标签: database postgresql

我有下一个设计疑问:

我有athlete个实体,athlete可以有很多国籍,所以我有第二个名为countries的表。然后在athletecountries之间存在多对多关系。我创建了另一个表athlete_country来解决多对多关系。

我的问题:对于athlete_country表中的任何条目,是否有办法实现athlete条目是强制性的?

我正在研究postgresql。在另一个数据库服务器中有没有办法?

1 个答案:

答案 0 :(得分:1)

不,出于逻辑原因这不可能这样做:athlete_country表引用运动员表,如果你做后退引用(事实上你可以这样做),你将无法在任何一个表中插入任何行因为每一行都应该引用另一个尚未插入的表中的行。

解决方案是使用多对一关系以及您所描述的多对多关系。例如,您可以将“primary_country”字段添加到直接引用国家/地区表的运动员表中。在这种情况下,您可以确定任何运动员与至少一个国家/地区有关系,在“primary_country”字段中指定,也可以选择与athlete_country表中列出的其他国家/地区相关联。

create table country(id serial primary key, name text);
create table athlete(id serial primary key, name text, primary_country int references country(id));
create table athlete_country(athlete_id int references athlete(id), country_id int references country(id), primary key (athlete_id, country_id));