我有 3 个表 t1,t2,t3。 t1 是爷爷,t2(父母)对 t1 的 id 有一个 FK,而 t3(孩子)对 t2 的 id 有一个 FK。我的问题是我希望 t3 也具有 t1 的 id 作为 FK。 我怎样才能做到这一点?之所以想要t1到t3的id,是因为不想每次都需要找t3记录的爷爷的时候和t2做join查询。
答案 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。而且您不需要额外的索引来支持您的外键,就像您使用替代设计一样。