Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用postgresql将第三个表与其他两个表链接以在其中包含动态填充的数据_Sql_Database_Database Design_Database Schema_Postgresql 9.2 - Fatal编程技术网

使用postgresql将第三个表与其他两个表链接以在其中包含动态填充的数据

使用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设置

我正处于一个阶段,需要在一个表中动态填充数据,该表使用外键约束与另外两个表关联。下面是我在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中后)

我希望输出如下所示,例如- 应用程序表和创建表填充了以下数据-

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