PostgreSQL创建1-to-1关系却显示为1-to-many的问题咨询
PostgreSQL 1对1关系的实现问题
PostgreSQL完全支持1对1关系,你当前的脚本之所以在ERD里显示为1对多,是因为缺少了关键约束。
你的现有代码里,country表的capital_id只是外键,但没加唯一约束——这意味着多个国家可以关联同一个首都,自然会被识别成1对多的关系。
下面给你两种常见的1对1关系实现方式:
方式1:可选的1对1关系(允许国家无对应首都)
给country表的capital_id添加UNIQUE约束,确保一个首都只能被一个国家关联:
CREATE TABLE capital ( id SERIAL PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE country ( id SERIAL PRIMARY KEY, name VARCHAR(100), capital_id INTEGER UNIQUE, CONSTRAINT fk_capital FOREIGN KEY(capital_id) REFERENCES capital(id) );
方式2:强制的1对1关系(国家必须对应一个首都)
把country表的主键直接设为关联capital的外键,这样每个国家必须绑定一个首都,且每个首都只能对应一个国家:
CREATE TABLE capital ( id SERIAL PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE country ( capital_id INTEGER PRIMARY KEY, name VARCHAR(100), CONSTRAINT fk_capital FOREIGN KEY(capital_id) REFERENCES capital(id) );
内容的提问来源于stack exchange,提问作者quintendc
相关产品推荐
相关产品推荐

