三范式与ER模型

三范式

概念:

三范式(3NF)是关系型数据库设计理论的基础,它确保数据的结构化和减少数据的冗余性。三范式由数学家E.F. Codd在1970年提出,作为关系理论的一部分。三范式包括:

第一范式(1NF):

每一个列都不可再分,即列中存储的都是原子值,不可再分的数据项。
同一个关系中,每个属性都有唯一的属性名。
每个记录(或行)都有一个唯一的标识,通常是主键。
每个列都不可再分,即列中存储的都是原子值,不可再分的数据项。

第二范式(2NF):

满足第一范式。
每个非主属性都完全函数依赖于整个主键。这意味着如果表有一个复合主键,则该表的每一个非主属性都应该依赖于这个复合主键的整个部分,而不仅仅是部分。

第三范式(3NF):

满足第二范式。
非主属性之间没有传递依赖。简单来说,非主属性不应该依赖于其他非主属性。

进一步地,还有其他的范式,如BCNF、3.5NF等,但它们在日常的关系数据库设计中并不常用。满足三范式通常被认为是创建无冗余和结构良好的数据库的最小要求。

设计满足三范式的数据库可以确保数据的结构清晰、易于维护,并减少数据的冗余性和插入、更新、删除操作时的异常。然而,有时在某些应用场景中,为了查询性能或其他优化,可能会故意违反三范式。在这种情况下,需要仔细权衡规范化的好处和其可能带来的问题。

第一范式,例:

分析:不符合第一范式

表包含“学生ID”、“班级”、“班主”、“课程”和“分数”这五个属性,不符合第一范式(1NF),是因为某些属性包含了可以进一步拆分的复合数据或数组。在第一范式中,每个列都应该只包含原子值,即不可再分的数据项。

例如,如果“班级”这一列包含了多个班级的信息,如“1A, 2B, 3C”,或者“课程”这一列包含了多门课程的信息,如“数学, 物理, 化学”,那么这个表就不符合第一范式。因为这些列包含了可以进一步拆分的复合数据。

为了使其符合第一范式,我们可以进行如下拆分:

学生表 (Students):

学生ID (StudentID, 主键)
其他与学生相关的属性(例如:姓名、性别等)

班级表 (Classes):

班级ID (ClassID, 主键)
班级名称 (ClassName)
班主 (TeacherID, 外键,关联到教师表)

课程表 (Courses):

课程ID (CourseID, 主键)
课程名称 (CourseName)

分数表 (Scores):

学生ID (StudentID, 外键,关联到学生表)
课程ID (CourseID, 外键,关联到课程表)
分数 (Score)
班级ID (ClassID, 外键,关联到班级表,可选,如果需要考虑班级对分数的影响)

这样,每个表都只包含原子值,每个列都不可再分,并且每个表都有一个明确的主键。同时,通过外键关联,可以确保数据的引用完整性。这样拆分后的数据库结构就满足了第一范式的要求。

第二范式,例:

一个表中只能保存一种类型数据 

第三范式,例:

同一个表中互相都不能被推导出来,例如上面的例子,班主任可以由班级推导出来,所以拆成两个表

ER模型

概念:

E-R模型(Entity-relationship model)实体关系模型,E- R模型的构成成分是实体集、属性和联系集。

表示方法:

(1)实体集用矩形框表示, 矩形框内写上实体名。

(2)实体的属性用椭圆框表示, 框内写上属性名,并用无向边与其实体集相连。

(3)实体间的联系用菱形框表示, 联系以适当的含义命名,名字写在萎形框中,用无向连线将参加联系的实体矩形框分别与菱形框相连,并在连线上标明联系的类型,即1——1、1——N或M——N.

数据库设计的过程,就是将现实世界抽象到信息系统的过程,使用的工具就是ER图,我们把所有参与到业务流程中的对象,抽象为“实体”,每个实体有自己的“属性”,实体与实体之间产生的动作叫"关系”,用线连接起来。

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在酒店管理系统的数据库ER图中,可以包含以下实体和关系:酒店、客房、客人、预订、入住、员工等。酒店和客房之间是一对多的关系,一个酒店可以拥有多个客房,而一个客房只属于一个酒店。客房和客人之间也是一对多的关系,一个客房可以接待多个客人,而一个客人只能入住一个客房。客房和预订之间也是一对多的关系,一个客房可以被多个预订所关联,而一个预订只能对应一个客房。预订和入住之间是一对一的关系,一个预订只能对应一个入住记录,而一个入住记录也只能对应一个预订。酒店和员工之间是一对多的关系,一个酒店可以拥有多个员工,而一个员工只能属于一个酒店。这些实体和关系的设计要满足数据库设计的范式,即第一范式、第二范式和第范式,以避免数据冗余和更新异常等问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [数据库的设计(E-R图,数据库模型图,范式)](https://blog.csdn.net/lovedieya/article/details/104039606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值