我该如何编写才能使错误:关系“照片”不存在并且不会发生“用户”的相同错误

问题描述

我正在尝试制作这两个表,但是用户和照片表都有一个引用另一个表的外键,并且出现错误。我将如何更改此代码以确保没有错误

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)
);

ER Diagram

解决方法

从表定义中删除“forward”引用,并在创建所有表后将其添加为 alter table 语句:

alter table users add constraint fk_users_photos
    foreign key (portrait) references photos(photoid);

事实上,表创建的一种风格是简单地创建所有没有外键引用的表,然后在表定义之后对所有表使用 alter table。这可以防止任何错误并允许循环引用。

Here 是一个 dbfiddle。请注意,您的代码具有自定义类型,我在小提琴中将其更改为基本类型。