create table Section
(
section_surr_id serial not null,
curr_id int,
section_id int not null,
foreign key (curr_id) references Curriculum(curr_id)
);
create table Lesson
(
lesson_surr_id serial not null,
curr_id int,
section_id int,
lesson_id int not null,
uri varchar not null,
title varchar not null,
description varchar,
foreign key (curr_id) references Curriculum(curr_id),
foreign key (section_id) references Section(section)
);
字符串
下面是我想做的事情的大致概述:课程有许多部分;每个部分有许多课程
在Lesson
表中,我想包括section_id
,因为每个课程都属于一个特定的部分;但是我已经为部分创建了一个代理键,它唯一地标识每个部分。
这样做的原因是每个课程都有许多部分,所以如果我把section_id
作为主键,那么它可能会重复,就像课程1的第1部分和课程2的第1部分一样;因此我有两个选择:
- 创建由
curr_id
和section_id
组成的复合自然键 - 或创建代理单列主键
现在我在第二课中引用什么键;,如果我引用代理键,那就不自然了,因为我必须寻找我想引用的部分的代理键,比如所需课程的1,2,3等。
1条答案
按热度按时间plicqrtu1#
有不止一个“正确”的答案,所以这是一个基于观点的问题,Stack Overflow不鼓励这样做。
我会创建一个复合主键。
字符串
然后用一个复合外键引用它。固执己见的部分是,一个人可以在
Lesson
表中保留串行键,或者不。以下任一项都是正确的:型
这取决于个人喜好。