sql server 2008学习7 规范化和其他基本设计问题

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

第一范式: 

全部是关于消除重复数据组和保证原子性的规范化信息.

通俗讲 就是 创建主键,然后将任何重复的数据组移动到新的表中,为这些表创建新键.

原始表结构:

image

 

一个客户可能对应很多订单,那么表中将出现大量的重复数据.解决办法就是 将重复列 移到另一个表中

imageimage

 

第二范式:

进一步减少重复的数据出现.(不一定是数据组)

尽量使所有列 都依赖于真个键.

第三范式:

处理的问题是 使得表中所有列 不仅仅是依赖于某个事物--而是要依赖于 正确的事物.

第三范式的规则:

1.首先实现第二范式.

2.任何列都不能依赖于非键列.

3.不可以有派生的数据.(派生 就是 有 表中其他的列 计算得到的列)

 

Boyce-Codd范式(实际是第三范式的变体):

试图解决 多个重叠候选键的情况,这只能在下列条件下发生:

1.所有候选键是组合键(即键由多个列组成).

2.不只一个候选键

3.每个候选键至少有一个列和另外一个候选键的列相同.

 

关系:

有三种主要关系:

  • 一对一
  • 一对多
  • 多对多

 

一对一关系:

一对一关系是指: 如果在是一个表中有一个记录,那么另一个表也会有一个与之匹配的记录.

零或一对一关系:

这本质上和一对一相同,不同的是 关系的一方可以选择有一个记录或者没有记录.

 

一对一或一对多关系:

一个表中的记录,对应另一个表的多个数据.

 

多对多关系:

那么一个权限的例子, 每个用户都可能有多种权限,  多个用户可以公有一种权限

 

image

 

就此建立了一多对多 关系的三个表  ;

 

反规范化:

  • 如果声明一个计算列或者派生列 数据有助于更有效地运行报表,那么不管怎么样也要采用.只需考虑有点和可能的风险(如果汇总数据与所派生的数据不同步该怎么办?)
  • 在表中包括一个或者多个 饭规范化的列,可以消除或者显著减少检索信息所需的连接数量.
  • 如果要保持原始数据(大部分不改动的,而且只用于报表的数据),那么完整性问题是相对次要的.

 

超出规范化的一些过则

  1. 保持简单.要避免在数据库中引入 的复杂性超出真正所需.最低要求的方法通常产生的结果不仅更容易编辑,而且运行更快.
  2. 选择数据类型. 比如 需要存储月份,1-12 那么数据类型 选择 单字节的 tinyint足够了,没必要选择int.
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/archive/2012/09/11/2679996.html ,如需转载请自行联系原作者
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2月前
|
SQL 缓存 关系型数据库
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
MySQL技能完整学习列表6、查询优化——3、查询缓存——4、SQL优化技巧
63 0
|
3月前
|
SQL 测试技术 项目管理
轻松学习SQL外键约束的核心原理和实用技巧
轻松学习SQL外键约束的核心原理和实用技巧
48 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
51 0
|
1月前
|
SQL 数据库 内存技术
学习数据库要掌握的54条SQL查询语句
学习数据库要掌握的54条SQL查询语句
14 0
|
2月前
|
SQL 安全 关系型数据库
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
MySQL技能完整学习列表3、SQL语言基础——3、SQL运算符和函数
36 0
|
3月前
|
SQL Java 关系型数据库
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)
33 0
|
4月前
|
SQL
SQL高阶学习
SQL高阶学习
17 0
|
4月前
|
Linux 数据库 数据安全/隐私保护
猿创征文|Linux centos7下利用docker快速部署SQLserver测试学习环境
猿创征文|Linux centos7下利用docker快速部署SQLserver测试学习环境
80 0
|
4月前
|
SQL 关系型数据库 MySQL
解密 sqli靶场第一关:一步一步学习 SQL 注入技术
解密 sqli靶场第一关:一步一步学习 SQL 注入技术
41 0
解密 sqli靶场第一关:一步一步学习 SQL 注入技术
|
4月前
|
存储 SQL 关系型数据库
小白带你学习linux SQL语句(二十八)
小白带你学习linux SQL语句(二十八)
67 0