数据库范式相关

第一范式(1NF)

每个属性不可再分
例:居民物业表中有一个属性是水电费.水电费还能再分成水费和电费,所以这个表不符合第一范式

函数依赖

对于关系R,有两个属性A,B,只要确定了A的值,B的值就唯一确定(不会出现一个A的值对应两个B的值),就称A函数确定B或者B依赖于A,记作A→\rightarrowB

完全函数依赖和部分函数依赖:

  1. 完全函数依赖:属性集合A→\rightarrow属性集合B,A的真子集↛\nrightarrow属性集合B
  2. 部分函数依赖:属性集合A→\rightarrow属性集合B,A的真子集→\rightarrow属性集合B.例如:(a,b)→\rightarrowc,若a↛\nrightarrowc并且b↛\nrightarrowc,就是(a,b)完全函数依赖于c;若存在a→\rightarrowc或者b→\rightarrowc,就是(a,b)部分函数依赖于c

传递函数依赖:
a→\rightarrowb,b→\rightarrowc成立,则有a→\rightarrowc成立

第二范式(2NF)

对于关系R ∈\in 1NF,并且对于每个给主属性完全函数依赖于任何一个候选码则R ∈\in 2NF

第三范式(3NF)

在2NF基础上,消除传递函数依赖
不能存在:非主属性A→\rightarrow非主属性B并且主属性C→\rightarrow非主属性A

BCNF

在3NF基础上,不能存在任何属性完全函数依赖于非码的任意一个组合
即消除上面的3NF的非主属性A→\rightarrow非主属性B

### 数据库范式的概念 数据库范式是指由E.F.Codd提出的关于关系数据库设计的一系列规则和标准,这些规则帮助开发者减少数据冗余并增强数据一致性[^3]。通过遵循不同的范式级别(从1NF到更高的形式如5NF),可以逐步优化数据库结构。 #### 第一范式 (1NF) 第一范式要求表中的每一列都必须是原子性的,即不可再分的基本数据项[^1]。这意味着每一条记录都应该是一个单一值而不是一组重复的值或者列表。 #### 第二范式 (2NF) 第二范式建立在第一范式的基础上,进一步规定所有的非主属性完全依赖于整个主键而非其部分组件[^2]。这有助于防止部分函数依赖带来的问题。 #### 第三范式 (3NF) 第三范式是在满足前两者的前提下,消除了任何非主属性对候选关键字之间的传递函数依赖关系[^2]。这样做的目的是为了确保没有间接的数据关联影响整体架构稳定性。 ### 应用场景分析 尽管高阶范式提供了更好的逻辑独立性和较少的数据重复率,但在实际项目开发当中并非总是追求最高程度的形式化处理。如,在某些特定条件下允许一定程度上的去规范化(反范式),以便换取读取速度方面的改进: - **低频写入高频读取环境**:在这种环境中适当引入一些冗余信息可能会显著加快查询响应时间因为减少了必要的联接次数[^4]。 - **实时报表生成系统**:当面对复杂的汇总计算需求时预先聚合结果存储下来也可以有效降低在线事务处理的压力从而提升用户体验质量。 然而需要注意的是过度使用这种方法不仅增加了磁盘占用还容易引发同步错误所以应当谨慎评估利弊后再决定实施策略。 ```sql -- 示SQL语句展示如何创建符合3NF的关系型表格 CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT NOT NULL, -- 假设Customer有单独一张表 FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID), OrderDate DATE NOT NULL ); CREATE TABLE OrderDetails ( DetailID INT AUTO_INCREMENT PRIMARY KEY, OrderID INT NOT NULL, ProductID INT NOT NULL, Quantity INT DEFAULT 0 CHECK (Quantity >= 0), Price DECIMAL(8 , 2 ) UNSIGNED , FOREIGN KEY (OrderID) REFERENCES Orders(OrderID), FOREIGN KEY (ProductID) REFERENCES Products(ProductID) ); ``` 以上代码片段展示了两个相互关联但各自保持良好分离度的实体定义方式——订单及其明细条目分别存放在不同地方并通过外键机制维持联系;这样的安排正好体现了良好的实践原则之一就是尽量避免不必要的嵌套复合类型字段存在于此同时又能很好地适应未来扩展可能性变化趋势的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值