Sql 如何确定自动生成的主键用作另一个表的外键
这是一个由两部分组成的问题。附件是PostgreSQL数据库表设计图。有四张桌子。表Sql 如何确定自动生成的主键用作另一个表的外键,sql,database,postgresql,database-schema,sql-insert,Sql,Database,Postgresql,Database Schema,Sql Insert,这是一个由两部分组成的问题。附件是PostgreSQL数据库表设计图。有四张桌子。表Main与表Submain具有一对多关系。表submin与表subsubsub具有一对多关系。所有四个表的主键都不是空的(因此它们是自动递增的)。每个表都有多个此处未显示的属性 问题1。多个用户将访问此应用程序和数据库。当用户访问使用此数据库的应用程序时,他们的一些信息将存储在表Main中。后续信息(由用户提供以及基于用户输入的其他结果)将存储在表submin和subsubsub中。我的想法如下: 用户通过表单
Main
与表Submain
具有一对多关系。表submin
与表subsubsub
具有一对多关系。所有四个表的主键都不是空的(因此它们是自动递增的)。每个表都有多个此处未显示的属性
问题1。多个用户将访问此应用程序和数据库。当用户访问使用此数据库的应用程序时,他们的一些信息将存储在表Main
中。后续信息(由用户提供以及基于用户输入的其他结果)将存储在表submin
和subsubsub
中。我的想法如下:
MainId
主键,一些用户信息将放在表Main
中Main
中的项目)在表submin
中插入一条记录。如何确定用户的主键MainId
,以便将其插入新记录的submin.MainId[FK]
subsubsub
中,该信息将基于表submin
中的信息。类似地,如何确定submin.submin[PK]
,以便将其用作Subsub.submin[FK]
中的外键Main
和Other
之间存在多对多关系(我省略了关联表)。但是,为了将记录插入表Other
,需要从子项
中获取信息。Subsub
和Other
之间将有一对一的映射。我是否需要绘制一对一关系,或者是否可以基于复杂的SELECT/JOIN
语句从tableMain
向下到tablesubsubsub
填充tableOther
?这可能是一个糟糕的问题,但我认为我需要绘制一个一对一的关系,并将外键subsubsubid[FK]
插入Other
,而不是尝试复杂的SQL语句。回答问题1:使用并返回带有RETURNING
子句的串行PK:
WITH ins_main AS (
INSERT INTO main(col1)
VALUES ('some value 1')
RETURNING main_id
)
, ins_submain AS (
INSERT INTO submain (main_id, col2)
SELECT main_id, 'some value 2'
FROM ins_main
RETURNING submain_id
)
INSERT INTO subsub (submain_id, col3)
SELECT submain_id, 'some value 3'
FROM ins_submain;
需要博士后9.1或更高版本。相关答案及解释和链接:
RETURNING
子句的串行PK:
WITH ins_main AS (
INSERT INTO main(col1)
VALUES ('some value 1')
RETURNING main_id
)
, ins_submain AS (
INSERT INTO submain (main_id, col2)
SELECT main_id, 'some value 2'
FROM ins_main
RETURNING submain_id
)
INSERT INTO subsub (submain_id, col3)
SELECT submain_id, 'some value 3'
FROM ins_submain;
需要博士后9.1或更高版本。相关答案及解释和链接: