如何确定逻辑模型中的基数?
它是基于一个实体的行与另一个实体的关系,还是我们应该考虑实体之间的自然关系,即实体之间的概念关系?
如果我有一个实体课程和一个实体课程类型,那么基数是什么?每门课程只能有一种课程类型。例如,文学士是一门课程类型的单身汉,理科硕士是课程类型的硕士
如果我有课程类型作为课程实体的一部分,那么课程类型将只包含有效课程类型的列表,并且它将是“多对一”(非标识),因为有许多课程可以有一个课程类型。
另一方面,如果我将课程类型实体建模为具有课程ID (外键)和课程类型,那么课程类型与课程类型之间的关系是“一对一”(标识)。
基本上,我想要理解的是,下面哪一个是正确的?
我们应该如何作出这个决定呢?有什么指引吗?
P.S.:我是一个初学者,并且使用Oracle数据建模器
发布于 2020-10-19 15:40:03
它应该以逻辑为基础。你应该能够用自然语言表达约束。只有在您已经摸索了如何自动使用图表的情况下,ERD才是很棒的。如果还没有,那么使用纯文本编辑器,它比ERD更好、更强大。
对于本例,从两个谓词开始
ctype {TYP}course {CRS}以下是一些基于约束的选项:
对于每一门课程,该课程恰好是一门课程类型;
对于每种课程类型,可能有多个课程属于这种类型。
ctype {TYP}
PK {TYP}
course {CRS, TYP}
PK {CRS}
FK {TYP} REFERENCES ctype {TYP}对于每门课程,该课程可能有多个课程类型;
对于每种课程类型,正好有一门课程属于这种类型。
ctype {TYP, CRS}
PK {TYP}
FK {CRS} REFERENCES course {CRS}
course {CRS}
PK {CRS}对于每一门课程,该课程恰好是一门课程类型;
对于每种课程类型,正好有一门课程属于这种类型。
course {CRS, TYP}
PK {CRS}
AK {TYP}对于每门课程,该课程最多只有一种课程类型;
对于每种课程类型,可能有多个课程属于这种类型。
ctype {TYP}
PK {TYP}
course {CRS}
PK {CRS}
course_ctype {CRS, TYP}
PK {CRS}
FK1 {CRS} REFERENCES course {CRS}
FK2 {TYP} REFERENCES ctype {TYP}对于每门课程,该课程可能有多个课程类型;
对于每种课程类型,可能有多个课程属于这种类型。
ctype {TYP}
PK {TYP}
course {CRS}
PK {CRS}
course_ctype {CRS, TYP}
PK {CRS, TYP}
FK1 {CRS} REFERENCES course {CRS}
FK2 {TYP} REFERENCES ctype {TYP}对于每门课程,该课程可能有多个课程类型;
对于每种课程类型,最多只有一门课程属于这类课程。
ctype {TYP}
PK {TYP}
course {CRS}
PK {CRS}
course_ctype {CRS, TYP}
PK {TYP}
FK1 {CRS} REFERENCES course {CRS}
FK2 {TYP} REFERENCES ctype {TYP}对于每门课程,该课程最多只有一种课程类型;
对于每种课程类型,最多只有一门课程属于这类课程。
ctype {TYP}
PK {TYP}
course {CRS}
PK {CRS}
course_ctype {CRS, TYP}
PK {CRS}
AK {TYP}
FK1 {CRS} REFERENCES course {CRS}
FK2 {TYP} REFERENCES ctype {TYP}注意:
All attributes (columns) NOT NULL
PK = Primary Key
AK = Alternate Key (Unique)
FK = Foreign Key一般而言,这一限制的措辞如下:
对于每一个A,即A {is | may be} of {exactly one | more than one | at most one} B;
对于每一个B,{exactly one | more than one | at most one},A,B的{is | may be}。
Term Range
---------------------------------
is of exactly one [1]
is of at most one [0,1]
may be of more than one [0,*]https://dba.stackexchange.com/questions/278283
复制相似问题