mysql数据库的规范和性能之间的取舍

一、规范性

1、第一范式1NF(属性的原子性)

如:
学生表:学号、姓名、性别、出生年月日
用户表:id、姓名、性别、地址
如果认为最后一列出生年月日还可以再分成(年,月,日),它就不是一范式了;
如果认为最后一列地址还可以再分成(省,市,县),它就不是一范式了。

2、第二范式2NF(字段依赖主键的关系)

表:学号、课程号、姓名、学分
这个表明显写了两个事务:学生信息和课程信息
正确做法:
学生:Student(学号, 姓名);
课程:Course(课程号, 学分);

选课关系:StudentCourse(学号, 课程号, 成绩)
成绩依赖于学号和课程号,满足第二范式。如果再加入姓名字段就不对了,因为姓名只依赖学号

3、第三范式3NF(字段的冗余性)

要求任何字段不能由其他字段派生出来,它要求字段没有冗余,即不存在传递依赖

表: 学号, 姓名, 年龄, 学院名称, 学院电话
因为存在依赖传递: (学号) → (学生)→(所在学院) → (学院电话) 。

正确做法:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 电话)。

二、性能问题

有规范,但是也会存在一些性能的问题。熊掌与鱼,不可兼得。考虑到成本、用户体验,性能比规范更重要。
阿里数据库有个规范:
关联查询表不得超过三张

1、故意增加一些冗余数据(从多表查询变为单表查询)
2、故意增加计算列(从大数据量降低为小数据量的查询)
3、增加索引,需要创建索引树,这里就比较耗内存,用空间换时间

### 数据库系统设计的概念与原理 数据库系统的设计是一个复杂的过程,它涉及到多个层次的抽象以及不同模式之间的交互。以下是关于数据库系统设计的核心概念基本原理: #### 1. **数据库系统的分层架构** 数据库系统通常采用三层架构来实现其功能分离灵活性。这三层分别是外模式(External Schema)、概念模式(Conceptual Schema)内模式(Internal Schema)。这种分层架构被称为三级模式结构。 - **外模式** 外模式也称为子模式或用户视图,它是特定用户所看到的数据模型的一部分。每个用户可能有不同的视图需求,因此可以存在多个外模式[^1]。 - **概念模式** 概念模式是对整个数据库逻辑结构的统一描述,定义了所有的实体、属性及其关系。这一层独立于具体的物理存储细节,反映了数据的整体结构联系。 - **内模式** 内模式关注的是数据的实际存储方式,包括文件组织形式、索引技术以及其他优化策略。这是最底层的部分,直接影响到性能表现。 #### 2. **模式的作用** 模式作为数据库设计中的核心组成部分,在实际应用中有以下几个重要作用: - 提供了一个清晰的方式来划分职责范围; - 增强了系统的可维护性扩展能力; - 减少了应用程序对底层硬件变化的影响程度; 例如,在SQL Server或者MySQL这样的RDBMS中,当创建一个新的表时,实际上就是在构建该表对应的概念模式实例。 ```sql CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), DepartmentID INT FOREIGN KEY REFERENCES Departments(DepartmentID) ); ``` 上述代码片段展示了如何通过SQL语句定义一个名为`Employees`的关系型表格,其中包含了字段定义及它们之间存在的约束条件——这些都属于概念模式的具体体现。 #### 3. **规范化理论的应用** 为了减少冗余并提高一致性,数据库设计师经常运用范式化方法论来进行初步设计方案调整。常见的正常形式有第一至第五范式(FNF),BCNF等。遵循适当级别的标准化可以帮助消除不必要的重复信息,并简化更新操作过程中的潜在问题。 然而值得注意的是,过度追求高阶范式可能会带来查询效率下降等问题,所以在实践中需要权衡利弊做出合理取舍。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值