Sql祖父父子关系

时间:2021-05-27 14:32:08

标签: sql

我有 3 个表 t1,t2,t3。 t1 是爷爷,t2(父母)对 t1 的 id 有一个 FK,而 t3(孩子)对 t2 的 id 有一个 FK。我的问题是我希望 t3 也具有 t1 的 id 作为 FK。 我怎样才能做到这一点?之所以想要t1到t3的id,是因为不想每次都需要找t3记录的爷爷的时候和t2做join查询。

2 个答案:

答案 0 :(得分:0)

方法一:

创建一个用户定义的函数,该函数将为您提供祖父,并在子表的计算列中使用该函数将祖父永久存储在子表中。无需连接或外键。

方法 2:

创建一个标量函数,它将带孩子并返回祖父母,在需要的地方使用它。

答案 1 :(得分:0)

像这样:

create table T1
(
   T1Id int primary key
)
create table T2
(
  T1Id int references T1,
  T2Id int,
  constraint pk_T2
    primary key (T1Id, T2Id)
)
create table T3
(
  T1Id int,
  T2Id int,
  T3Id int,
  constraint pk_T3
    primary key (T1Id, T2Id, T3Id),
  constraint fk_T3_t2
    foreign key (T1Id,T2Id) references T2
)

现在 T3 具有 T1Id,并且具有优化的访问路径以查找特定 T1Id 或特定 (T1Id,T2Id) 的所有 T3。而且您不需要额外的索引来支持您的外键,就像您使用替代设计一样。