使用postgresql将第三个表与其他两个表链接以在其中包含动态填充的数据
我正处于一个阶段,需要在一个表中动态填充数据,该表使用外键约束与另外两个表关联。下面是我在PostgreSQL中创建的模式/表 表1: 表#1“应用程序”的“id”为“serial”,它也是主键,“name”为Varchar,“Size”和“rate”为整数 表2: 同样地。createId也是该表的一个串行主键,“name”作为varchar,“score”作为整数 现在,我正在创建第三个表,假设它是上面两个表的映射表,其中包含以下字段- 表3 在上表中,我再次将app_create_id设置为一个序列,并将主键和其他两个字段设置为外键,并引用了上表application(id)和create(createId) 接下来,当我在表#1和表#2中插入值时,我的理解是,它应该根据我在其他两个表中插入的数据自动填充到第三个表#3中。但是,我得到的是一个空白表,这意味着在映射表的表3(app#u create)中没有值。(插入表1和表2中后) 我希望输出如下所示,例如- 应用程序表和创建表填充了以下数据-使用postgresql将第三个表与其他两个表链接以在其中包含动态填充的数据,sql,database,database-design,database-schema,postgresql-9.2,Sql,Database,Database Design,Database Schema,Postgresql 9.2,我正处于一个阶段,需要在一个表中动态填充数据,该表使用外键约束与另外两个表关联。下面是我在PostgreSQL中创建的模式/表 表1: 表#1“应用程序”的“id”为“serial”,它也是主键,“name”为Varchar,“Size”和“rate”为整数 表2: 同样地。createId也是该表的一个串行主键,“name”作为varchar,“score”作为整数 现在,我正在创建第三个表,假设它是上面两个表的映射表,其中包含以下字段- 表3 在上表中,我再次将app_create_id设置
application
--------------------------
id | name | size | rate
1 | xyz | 2096 | 12
2 | mno | 1280 | 34
Create
-------------------------
createId | name | score
1 | a.b.c | 50
2 | m.cpm |20
现在,在我将数据插入上面的两个表中之后,我不确定下面的第三个表中会发生什么。我想在填充上述两个表时,它也会以相同的方式填充,因为存在主键和外键关系
表3
我相信这与多对多的关系有关,但我不确定我应该如何选择一种或任何正确的方式,如何进行同样的操作,并获得同样的结果。
如果我做错了什么,请帮助我理解并纠正我,或者指导我如何继续,以便将数据动态地放入映射表#3中?这与多对多关系有关。任何人都不可能为你填写表3的原因是因为没有人知道这种关系是什么。因此,你需要自己填写。应用程序如何与创建相关?(这是什么?)
因此,您需要问自己/老板/同事的问题是:哪些应用程序应该连接到哪个应用程序 外键不是这样使用的。它们告诉DBMS,一个列列表的值的子行也必须显示为另一个列列表的值的子行。它们可以与表更新上的效果关联,这些效果与引用的表更新级联 通常,我们希望具有外键引用的基表与任何基表一样,由用户根据规则/谓词/标准进行更新,以便将行放入表中或将它们移出表中 您所描述的内容接近视图。一个虚拟表,其值是包含基或其他视图的表达式的当前值。你必须说出你想要的表达方式。(它不基于外键。)但在此之后,DBMS将计算适当的值 在这里,您可能期望
app\u create
(忽略app\u create\u id
)是其他两个的连接:
create view app_create as
select id, createId
from application JOIN create
(但您没有解释输出应该是什么样子,也没有给出输出示例。)
这不包括app\u create\u id
。然而,由于连接,(id,createId)
是唯一的。(在一些可以声明的SQL DBMS中)因此您不需要app\u create\u id
但是
pp\u create\u id
无论如何都是有问题的。如何确定其价值?它必须是id和create的函数,可能还有其他函数。相同的值能否在不同的时间标识不同的行?两个不同的(id,createId)
对能否在不同的时间使用相同的app\u create\u id
?除非您自己明确地将数据插入到第三个表中,否则不会发生任何事情。引用完整性用于在将父行插入子表时检查父行是否存在,而不是为您插入数据。@peterm:谢谢您的回答。您能建议我如何进行映射,以便将数据插入到第三个表中。这似乎与您在dba.SE上发布的问题基本相同:。请不要像那样在网站上发帖,尤其是在没有链接的情况下,这会浪费每个人的时间。@CraigRinger:很抱歉,我是StackOverflow的新手。我会记住这一点。谢谢你的建议!
app_create
---------------------
app_create_id | id | createId |
application
--------------------------
id | name | size | rate
1 | xyz | 2096 | 12
2 | mno | 1280 | 34
Create
-------------------------
createId | name | score
1 | a.b.c | 50
2 | m.cpm |20
app_create
----------------------------------
app_create_id | id | createId |
create view app_create as
select id, createId
from application JOIN create