表“用户”取决于“公司”,“职位”和“雇员”:
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会中止逻辑查询。我应该先创建所有表,然后再对其进行更改以包括这些引用,还是有其他方法?
答案 0 :(得分:0)
我认为这不是问题,因为company
和employee
列可以为空。因此,您可以插入一个允许修改其他用户的用户。
同样,您可以使用last_modified_by_user
(我认为该名称更具描述性),并在创建记录时将其保留为NULL
。修改将仅用于对记录的更改,而不是原始记录。
如果您尝试将这些列设置为NOT NULL
,则会遇到问题。