数据库的课堂讨论(二)
今天,参加数据库线上讨论的问题(每次都得花我好多时间……)
问下面三者的关系,一开始我很懵,没学过 实体型 和 实体集, 因为看的是 浙大的课,而不是人大的课,书也不一样,书里莫得提及这个概念……
实体(Entity)
客观存在并可相互区别的事物称为实体。可以是具体的人、事、物或抽象的概念。
例如:学生、学生学号、身高、体重、老师、工资、办公室、教学楼、编程语言、c语言、汇编语言、侦探小说等都是实体
实体型(Entity Type)
用实体名及其属性名集合来抽象和刻画同类实体称为实体型
个人觉得这 名词的概念 没有明确的界限,学生可以是一个实体、也可以是一个实体型
实体集(Entity Set)
同一类型实体的集合称为实体集
这个概念更加抽象,界限也很模糊……
举个例子吧
例如,全世界职业比例,
CREATE TABLE instructor( total_num bigint, profession_name varchar(20) not null unique, primary (profession_name), check(total_num>= 0) ); CREATE TABLE profession( ID int, name nvarchar(20), num bigint, check(profession_num >= 0) foreign key(name) reference instructor(profession_name); );
创建的表 中没有定义职业 的详细信息,这时候数据库只需要存储 老师、学生的数量 即可,这时候 老师、学生 内部就没有属性了,这时候的老师、学生就是实体、同属于直接这个实体集或实体型(具体是哪个要结合 实体 间的练习来分析了,代码所示 个人觉得是 实体)
如果,这个 表的定义如下
CREATE TABLE instructor( total_num bigint, profession_name varchar(20) not null unique, primary (profession_name), check(total_num>= 0) ); CREATE TABLE profession( ID int, name nvarchar(20), num bigint, check(profession_num >= 0), primary (prfe_ID), foreign key(name) reference instructor(profession_name) ); CREATE TABLE teach( name nvarchar(20), prfe_ID int, work_place nvarchar(20), -- 省略详细信息 foreign key(prfe_ID) reference instructor(ID) ); CREATE TABLE student( name nvarchar(20), prfe_ID int, study_place nvarchar(20), -- 省略详细信息 foreign key(prfe_ID) reference instructor(ID) );
如果把 student 看成实体,那么profession是 实体型 ,所有职业的 抽象体,而实体集就是所有职业的汇总
如果把 student 内部的属性看成实体, 那么 student 就是实体型,而 student 形成的 students 才是实体集
个人觉得离开具体的表来探讨什么是 实体型 什么是 实体集 无疑是 纸上谈兵,就像于最开始的讨论,什么是数据什么数据语义所说的一样,具体情况需要具体分析,毕竟这些都是逻辑概念,没有实际存储,严格的在物理上进行定义
以上纯属个人观点,如有不当望指正