Sql 一个子属性(外键)存储了来自同一表中两列的数据
我在这里分析一些csv文件,并试图基于它们创建DB结构,但显然,表2中的一列包含来自表1中两个不同列的数据。有人能帮助我如何在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
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吗?