Sql 跨行的fk pk关系

Sql 跨行的fk pk关系,sql,primary-key,foreign-key-relationship,split,Sql,Primary Key,Foreign Key Relationship,Split,将一个表拆分为多个表时,外键引用不同行的主键是常见情况吗? 例如 源表数据为 id1 id2 name1 name2 10 1 a10 b1 9 8 a11 b2 8 3 a12 b3 3 9 a14 b4 1 10 a15 b5 所以当我创建主键表时 create table pk_table (id1 integer primary key , name1 varchar2(20)) cr

将一个表拆分为多个表时,外键引用不同行的主键是常见情况吗?
例如
源表数据为

id1  id2 name1   name2
10   1   a10     b1
9    8   a11     b2
8    3   a12     b3
3    9   a14     b4
1    10  a15     b5
所以当我创建主键表时

  create table pk_table (id1 integer primary key , name1 varchar2(20))
  create table fk_table (id2 integer, name2 varchar2(20) foreign key(id2) references pk_table(id1))
和外键表

  create table pk_table (id1 integer primary key , name1 varchar2(20))
  create table fk_table (id2 integer, name2 varchar2(20) foreign key(id2) references pk_table(id1))
因此,当我按照表拆分数据时:

pk_表数据为:

id1 name1
10  a10
9   a11
8   a12
3   a14
1   a15
并且外键数据是

id2  name2
1   b1
8   b2
3   b3
9   b4
10  b5
那个么,你们有并没有看到fk并没有引用源表中的同一行pk的情况


已编辑:已更新表格数据以使其更有效。

拆分表格的方式不遵循规范化标准。源表中的字段之间没有(可见的)函数依赖关系。其次,您的表甚至不共享PK-FK关系。您的问题毫无意义,因为您假设您使用PK-FK拆分表格是不正确的。

首先回答您提出的问题:

是的,当您将一个表拆分为两个(或多个)时,可以看到不同行中的数据。事情本来就是这样的™. 不管原始数据是表中的哪一行,还是新数据是表中的哪一行。行号与您的数据没有任何关系,这就是它显示自身的方式。例如,您可以这样创建新的
pk_表

id1 name1
1   a15
3   a14
8   a12
9   a11
10  a10
这也没什么区别

其次,这涉及到其他人想告诉你的事情。将原始表转换为两个辅助表的方式不会为您提供数据库。您为创建
fk_表提供的语法a)没有意义,b)也不起作用

拆分表时需要做的是在
fk_表
中创建一个新列,其中包含
pk_表
中的主键。这个额外的列是告诉数据库
fk_表中的哪个记录与
pk_表中的哪个记录匹配的链接。回到你原来的问题,这个链接就是为什么旧记录和新记录在哪一行没有区别的原因。重要的是
fk_表中的外键列

为了实际理解这一点,新表应该看起来更像这样:

id1 name1
1   a15
3   a14
8   a12
9   a11
10  a10
pk_表-
id1
是主键:

id1 name1
10  a10
9   a11
8   a12
3   a14
1   a15
fk_表-
id2
是主键,
fk_id1
是pk_表的外键

id2  name2 fk_id1
1   b1     10
8   b2     9
3   b3     8
9   b4     3
10  b5     1

使用此结构,您可以运行查询,将每个
pk_表
记录正确链接到正确的
fk_表
记录

请阅读Korth的书“数据库系统概念”。在接下来的几天里,阅读你在数据库中发现和理解的任何内容。这不是一个真正的问题。请准确说明您的问题所在。
1,b1
绝对应该存在于
fk_表中
。如果原始表不存在,则未正确转换原始表中的记录。如果没有链接,
10,a10
链接到什么?另外,在创建表
fk_table
时,您仍然应该将
id2
标识为主键,因为它是该表的主键。如果fk没有引用任何PK,那么它就不是fk本身。@Rachcha:为什么这不是一个真正的问题?你从来没有见过这种情况吗?@Santhosh:如果FK没有引用任何PK,那么我们就会得到引用完整性失败。我没有规范我的表。我正在从一个现有表创建多个表。所以问题是正确的,我的答案是正确的。显然,你不理解PK-FK概念,这本身并不是问题,但你的头脑已经关闭,无法修正你(被打破的)假设。如果您声称您没有正常化,那么您不应该询问缺少的PK-FK行。如果你想取得进展,首先确定每个表中的主键。@koriander+1表示正确(并排除不应有的否决票),但我可以用一些讽刺的语气温和地说,很明显,你不明白从质询者的角度来看,对显然是入门级问题的高水平回答可能不会带来满意吗?谢谢你的upvote@mcalex和你的善意提醒。我本应该对海报同样温柔:)通常我会努力达到对海报的理解程度,但我只有时间做一个简短的回答。这就是为什么我对你的答案投了更高的票。