Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Sql 一个子属性(外键)存储了来自同一表中两列的数据_Sql_Database_Postgresql_Foreign Keys_Primary Key - Fatal编程技术网

Sql 一个子属性(外键)存储了来自同一表中两列的数据

Sql 一个子属性(外键)存储了来自同一表中两列的数据,sql,database,postgresql,foreign-keys,primary-key,Sql,Database,Postgresql,Foreign Keys,Primary Key,我在这里分析一些csv文件,并试图基于它们创建DB结构,但显然,表2中的一列包含来自表1中两个不同列的数据。有人能帮助我如何在SQL中重新创建相同的逻辑吗 我试过: CREATE TABLE table1 ( field1 varchar(4), field2 varchat(5), PRIMARY KEY(field1, field2) ); CREATE TABLE table2 ( field3 varchar(5) REFERENCES ta

我在这里分析一些csv文件,并试图基于它们创建DB结构,但显然,表2中的一列包含来自表1中两个不同列的数据。有人能帮助我如何在SQL中重新创建相同的逻辑吗

我试过:

CREATE TABLE table1
(
     field1 varchar(4),
     field2 varchat(5),

     PRIMARY KEY(field1, field2)
);

CREATE TABLE table2
(
      field3 varchar(5) REFERENCES table1(field1, field2)
)
那没用。有什么想法吗


谢谢

如果我没记错的话,一个表上只能有一个主键;如果对表2和表1进行了两个单独的内部联接以分离这两个概念,然后联接两个新表以适当地分离表2中的概念,会怎么样

大概是这样的:

Select Field3 
into #tmpkeyA 
from table2 
inner join table 1 on field3 = field 1

Select Field3 
into #tmpkeyB 
from table2 
inner join table 1 on field3 = field 2
然后基于这两个临时表构建逻辑,以将数据适当地按其适当的顺序排列


还是我误解了问题的本质?字段的性质是什么?

这是不可能的,在一列中存储两种不同的内容是一种糟糕的设计。您应该拆分表2中的列(即使您没有将其用作外键),这并不清楚。有PKs/Unique吗?“表2中的一列包含来自表1中两个不同列的数据”是否意味着表2中的值同时存在,或者正好存在,或者同时存在?(FK约束表示列列表的子窗口在别处显示为PK或UNIQUE。“两者中”PK/UNIQUE为2 FKs。否则,您无法在DBMS中声明性地强制执行所有约束。您需要触发器或设计更改。通常这是子类型的反模式。)@philipxy yes,表2中的一列包含来自表1中两个不同列的数据。所以我不确定这样的smth是否可行。您认为一个好的解决方案是将表1拆分到另一个表中,然后我将使用表1a和表1b为表2提供数据?您刚才重复了相同的含糊不清的语句“来自两个不同列的数据”。并且没有提供PKs/UNIQUEs。给定的t2值必须在两者中,还是必须正好在一个中,或者必须在一个或两者中?(一个FK到X暗示必须在X中;两个FK暗示必须在两者中。)PS请通过编辑澄清,而不是评论。PS一旦明确,这将是一个常见问题。通过谷歌搜索你的问题的清晰陈述。虽然你可能会在你目前的措辞中找到一个。此外,google re SQL/数据库子类型/继承/多态性&re(反模式)2/许多FKs到2/许多表。我当前的一般注释是“更好”/“最好”等:除非您定义,否则在工程中没有“更好”/“最好”这样的东西。同样不幸的是,所有合理的实用定义都需要大量的经验,其中包含大量的因素,这些因素与对细节的敏感度混乱相互作用。做简单的设计。当你通过测量证明一个设计和你能想到的所有备选方案都有问题(无论当时是什么意思),然后问一个非常具体的问题。还应定义“更好”/“最佳”。问题中的第一个表只有一个主键。您好,您是说我需要将表1拆分为两个不同的表,然后将其连接到表2吗?