数据库范式学习和ER模型

本文详细介绍了数据库的三个范式:第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。通过实例解析,阐述了每个范式的概念和要求,并展示了如何通过重构表结构来满足这些范式,以优化数据库设计,减少数据冗余和提高数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一范式(1NF)

:强调的是字段的原子性,即一个字段不能够再分成其他几个字段。

           

说明:这种表结构设计就没有达到 1NF,要符合 1NF 我们只需把字段拆分,即:把 contact 字段拆分成 name 、tel、addr 等字段。

第二范式(2NF)

满足 1NF的基础上另外包含两部分内容:一是表必须有主键。 二是非主键字段必须完全依赖于主键,而不能只依赖于主键的一部分。

举例:OrderDetail表中的主键为OrderID(订单ID)和ProductID(产品ID),UnitPrice(单价)受ProductId(产品ID)约束,属于部分依赖于主键。同样ProductName(商品名称)受UnitPrice(订单ID)约束,属于部分依赖于主键,因此不满足第二范式要求。

修改后:

可以看出两个表中的红框为主键,非主键字段全部依赖于主键字段。满足二范式。

第三范式(3NF)

第三范式(3NF): 满足 2NF,另外非主键字段必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键字段 A 依赖于非主键字段 B,非主键字段 B 依赖于主键的情况。

举例:在Order表中OrderID为主键,其余字段都是直接依赖于主键,满足第二范式。通过观察,发现CustomerName(用户名称)、用户地址字段都是直接依赖于用CustomerID(用户ID),从而间接的依赖于主键。不满足第三范式。

修改后:

所有非主键字段都是直接依赖于主键字段。

ER模型

                               

 

### 数据库 ER 模型与星型模型的概念及区别 #### 什么是 ER 模型ER 模型(实体-关系模型)是一种用于描述现实世界中对象及其相互关系的抽象工具。它通过定义实体、属性以及它们之间的联系来表达复杂的数据结构。该模型由 Bill Inmon 提出,主要用于数据仓库的设计阶段,强调从整个企业的视角出发,构建全面的企业级数据视图[^4]。 #### 什么是星型模型? 星型模型是一种常见的维度建模方式,广泛应用于数据仓库领域。它的核心是一个事实表连接多个维度表,形成类似于星星形状的结构。由于其简单性高效查询能力,在实际项目中被频繁使用[^1]。 #### 主要区别 | 方面 | ER 模型 | 星型模型 | |--------------|---------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------| | **目标** | 描述企业整体业务流程,注重规范化一致性 | 面向分析需求优化,简化查询路径 | | **设计原则** | 基于第三范式(3NF),追求无冗余的数据存储 | 不完全遵循3NF,允许一定程度的数据重复以提高访问速度 | | **复杂度** | 设计较为复杂,涉及多层实体间的关系 | 结构相对简单直观 | | **性能表现** | 查询可能较慢,因为存在较多JOIN操作 | 查询效率较高,适合OLAP场景 | #### 应用场景比较 - **ER 模型适用场合** - 当需要创建一个覆盖全公司范围的信息系统时。 - 对精确性要求极高而对实时响应时间敏感度较低的情况下。 - **星型模型适用场合** - 在大规模数据分析环境中,特别是BI报表生成过程中。 - 如果应用程序主要关注快速聚合计算而非事务处理,则更适合采用此方案[^3]。 ```sql -- 创建简单的星型模型SQL语句示例 CREATE TABLE sales_fact ( sale_id INT PRIMARY KEY, product_key INT NOT NULL, -- 外键指向产品维表 date_key DATE NOT NULL, -- 外键指向日期维表 quantity_sold DECIMAL(8,2), revenue DECIMAL(10,2) ); CREATE TABLE product_dim ( product_key INT PRIMARY KEY, product_name VARCHAR(50), category VARCHAR(30) ); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值