问题描述
我正在尝试制作这两个表,但是用户和照片表都有一个引用另一个表的外键,并且出现错误。我将如何更改此代码以确保没有错误。
create table people (
id serial,family_names text,given_names text,displayed_names text,email_address text,primary key (id)
);
create table users (
userid integer,website text,date_registered date,gender GenderValue,birthday date,password text,portrait integer,primary key (userid),foreign key (userid) references people(id),foreign key (portrait) references photos(photoid)
);
create table photos (
photoid serial,title TitleValue,date_uploaded date,date_taken date,description text,technical_details text,safety_level safetyLevel,visibility visibilityLevel,owns integer,primary key (photoid),foreign key (owns) references users(userid)
);
解决方法
从表定义中删除“forward”引用,并在创建所有表后将其添加为 alter table
语句:
alter table users add constraint fk_users_photos
foreign key (portrait) references photos(photoid);
事实上,表创建的一种风格是简单地创建所有没有外键引用的表,然后在表定义之后对所有表使用 alter table
。这可以防止任何错误并允许循环引用。
Here 是一个 dbfiddle。请注意,您的代码具有自定义类型,我在小提琴中将其更改为基本类型。