我创建了一个名为STUDENT
的表格,其中包含唯一ID作为PRIMARY KEY以及其他相关属性,例如Name
,Addr
,Gender
等...
由于我不想增加STUDENT
的表格大小,我创建了一个名为ACADEMIC RECORDS
的弱实体,它存储了学生以前的学术记录。但是在这张表中我只有创建了一个PRIMARY KEY Unique ID
,它引用了学生的Unique ID
。并且在弱实体Unique ID
表中没有与ACADEMIC RECORD
一起使用的其他属性。
当我看到一个弱的实体的定义时,它将主键定义为弱实体的属性和所有者的表的主键(在这种情况下为STUDENT
)
我的方法是创建外键作为表ACADEMIC RECORD
中唯一的主键吗?
STUDENT Table
**UID** NAME GENDER ADDRESS PHNO.
ACADEMIC RECORD Table
**UID** HighschoolMarks GradSchoolMarks
答案 0 :(得分:5)
拥有一个完全是外键的主键并没有什么不妥。这是实现类似“基类”的常用方法,其中实体在基表中有一行,而可能在一个或多个扩展表中有一行(一对一或零关系)。
我不确定这是你所做的最合适的架构。如果学术记录和学生之间确实存在一对一的关系,那么看起来它们对我来说就是同一个实体的一部分。
在这种情况下,从标准化的角度来看,记录列应该是主学生表的一部分。 也许有一个效率减法的理由,但“我不想增加表格大小”通常不是充分的理由。数据库可以应对大表。
答案 1 :(得分:1)
我不清楚你在问什么,但听起来你使用的是正确的方法。
您的STUDENT
表需要一个主键才能为每一行提供唯一的引用。
您的ACADEMIC_RECORD
表还需要一个主键,以便为每一行提供唯一的引用。
每个学生可能拥有零个或多个学术记录,并且您想要识别每个学术记录所属的学生。您可以通过在ACADEMIC_RECORD
表格中添加一个包含学生id
(主键)的列来执行此操作:
STUDENT ACADEMIC_RECORD
id
id <-------> student_id
name high_school_marks
gender grade_school_marks
address
phone_no
假设你有三个学生:Alice,Bob和Dave。爱丽丝和戴夫有三个学术记录,鲍勃有两个。你的表看起来像这样(我省略了一些列以使事情更清楚):
STUDENT
id name
1 Alice
2 Bob
3 Dave
ACADEMIC_RECORD
id student_id
1 1
2 1
3 1
4 2
5 2
6 3
7 3
8 3