文章目录
一、数据独立性
- 物理数据独立性:物理级别可以更改,而无需更改逻辑级别
- 逻辑数据独立性:逻辑级别可以更改,而不必更改外部级别
二、数据库系统设计
- 数据库规划
- 系统定义
- 需求收集和分析
- 数据库设计
- 逻辑数据库设计:识别需要在数据库中表示的重要对象以及这些对象之间的关系
- 创建并检查ER模型
- 物理数据库设计:描述如何在目标DBMS中物理实现逻辑设计(作为表)
- 将ER模型映射成为物理表
- 逻辑数据库设计:识别需要在数据库中表示的重要对象以及这些对象之间的关系
- DBMS选择
- 成本、功能性问题、操作系统问题、系统平台问题…
- 应用设计
- 原型设计
- 数据转换和加载
- 测试
- 运行和维护
数据库一些知识:
- 一个数据库是操作系统文件的集合
- 数据库之间不能进行文件共享
- 一个数据库至少包括一个数据文件和一个日志文件
- 数据和日志文件最好不要放在同一驱动器上
- 数据库中每个文件的信息和属性存放在数据库系统视图sys.database_files
- 主数据文件(.mdf)
- 辅助数据文件(.ndf)
- 日志文件(.ldf)
- DBMS通常提供两种类型的数据库安全:
- 系统安全:系统级访问和使用数据库(如用户名/口令)
- 数据安全:访问和使用数据库对象(如表和视图)
三、数据完整性
- 实体完整性:每个表都必须有一个有效的主键。
- 参照完整性:没有不匹配的外键值。引用完整性要求外键值与它们所引用的表中的现有主键值匹配。(父表的主键在子表作为外键)
四、数据类型
-
Date,DateTime,Timestamp
- Date 表示年月日,如YYYY-MM-DD
- DateTime 表示年月日和时间信息,如YYYY-MM-DD HH:MM:SS
- Timestamp 和DateTime表示的信息相同,但时间范围不同
-
Char,Varchar
- Char:长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;
- 有var前缀的,长度可变的,表示实际存储空间是变长的,比如varchar, nvarchar。
- 注意:Varchar类型的实际长度是它的值的实际长度+1,最后一个字节用于保存实际使用了多大的长度
-
nUnicode,non-Unicode
- 数据库中,英文字符只需要一个字节存储,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。
- Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符。
char,varchar | 最多8000个英文,4000个汉字 |
---|---|
nchar,nvarchar | 可存储4000个字符,无论英文还是汉字 |
总结:
- CHAR,NCHAR :定长,速度快,占空间大,读取可能需处理。
- VARCHAR,NVARCHAR,TEXT :不定长,空间小,速度慢,读取无需处理。
- NCHAR、NVARCHAR、NTEXT :处理Unicode编码,不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
五、数据库范式
数据库规范化是组织关系数据库的列(属性)和表(关系)以最小化数据冗余的过程。
- 1NF:要求数据库中的表都是二维表
- 2NF:消除非主属性对主键的部分函数依赖
- 3NF:消除非主属性对主键的传递函数依赖
- BCNF:消除主属性对主键的部分及传递函数依赖
- 4NF:消除非平凡多值依赖
反规范化:有时规范化的数据库设计不能提供最大的处理效率,可能有必要接受不满足规范化设计却有利于性能的某些好处的损失。
实际上反规范化设计是使用空间(冗余)换取时间(效率)
要考虑读写操作比例,读取操作与写入操作的比例为4:1或者3:1时,读操作的频率要远远高于写操作,写操作的效率降低并不能抵消读操作的效率提高所带来的总体性能提升。这时应该考虑使用反规范化设计。
六、分解
- 无损分解:对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过自然联接运算恢复起来
- 有损分解:对关系模式分解时,原关系模型下任一合法的关系值在分解之后不能通过自然联接运算恢复起来
无损分解举例:r = r1 ⋈ r2:(r表分解为r1和r2后,自然连接可恢复)
r | A | B | C |
---|---|---|---|
1 | 1 | 1 | |
1 |