我有一些像这样的表:
批次与名为batches_x_terms的表中的术语具有多对多的关系。
我想创建一个表来为多个术语分配主题,这些主题也可以从批量中追溯,所以我想创建一个这样的表:
batches_x_terms_x_subjects(id,batch_id,term_id,subject_id)
但是进一步思考后我得出结论,我会在这个表中有很多行,以减少数据和数据冗余。
所以我想知道我是否可以在M2M关系中使用M2M表的PK作为FK:
' batches_x_terms'和'科目'
更新1: 批次表有另一列'年' 批次将具有来自不同年份的相同批次,例如
现在,假设每个批次都有4个学期(学期),并且在每个学期他们有不同的科目,但有些科目在这两个批次之间是共同的,对吗?
如果我关注' batches_x_terms'和' batches_x_subjects'然后,我无法确定在特定学期中教授哪个学科的学科。我需要像这样对我的数据进行分类:
此外,我有一个限制,我不能为每个批次分配不同的术语ID,对于一个学期,每个批次都有一个共同的术语ID。
我希望这些细节很有用。
答案 0 :(得分:1)
声明一个列集,其子行值是唯一的,但不包含任何较小的列集,其子行值唯一为UNIQUE NOT NULL。 (当NOT NULL合适时,我将自己限制为。)您可以将每个表的一个这样的集合定义为PRIMARY KEY。 (这相当于UNIQUE NOT NULL的约束。)
当列集子行值必须出现在另一个表中时,作为唯一列集的子行值,声明一个FOREIGN KEY。如果唯一列集未经过UNIQUE或PK声明,请执行此操作。
不仅" can"你声明每个PK,UNIQUE和/或FK,你应该声明每个可能的。 (有些DBMS会阻止你声明FK周期。)