【发布时间】:2019-07-07 21:26:47
【问题描述】:
表“用户”取决于“公司”、“职位”和“员工”:
create table companies(id serial primary key,
"name" varchar,
"comment" varchar,
lastmodified_datetime timestampz default now());
create table positions(id serial primary key,
"name" varchar,
"comment" varchar,
lastmodified_datetime timestampz default now());
create table employees(id serial primary key,
"name" varchar,
"comment" varchar,
firstname varchar,
middlename varchar,
lastname varchar,
isoffice boolean default true,
"position" integer references positions(id),
lastmodified_datetime timestampz default now());
create table users(id serial primary key,
"name" varchar,
"comment" varchar,
"login" varchar not null,
"password" varchar not null,
isadministrator boolean,
company integer references companies(id),
employee integer references employees(id),
lastlogged_datetime timestampz default now(),
lastmodified_datetime timestampz default now());
每一行都有一个“lastmodified_datetime”列来存储时间,但我还想存储有关用户的信息(添加lastmodified_user integer references users(id) 列)。
这会造成一种情况,即为了创建基本表,我需要一个已经存在的“用户”表,但为了创建“用户”表,我需要基本表。我也读过in this SO question 循环引用会导致糟糕的设计。
如何在 PostgreSQL 的上下文中正确实现它? 当我尝试创建一个引用另一个尚不存在的表的表时,PostgreSQL 会中止符合逻辑的查询。我应该先创建所有表,然后更改它们以包含这些引用还是有其他方法?
【问题讨论】:
标签: sql postgresql create-table