Sql Server系列:规范化及基本设计
1 理解表
表是具有相同常规属性(attribute)的数据实例的集合。这些数据实例组成数据行和列。
2 数据表设计范式
2.1 第一范式
第一范式(1NF)是关于消除重复数据组和保证原子性的规范化。理解为创建主键,将任何重复的数据组移动到新的表中,为这些表创建新键,如此进行下去。
2.2 第二范式
第二范式(2NF)的两个规则:
◊ 表必须符合第一范式
◊ 每列必须依赖于整个键
2.3 第三范式
第三范式的3个原则:
◊ 表必须符合2NF
◊ 任何列都不能依赖于非键列
◊ 不可以有派生的数据
示例:

在OrderDetails表中,Subtotal列通过Quantity与UnitPrice相乘得到,这是不符合第三范式的。但这样设计是为了速度,WHERE Subtotal > 100的查询比读入 WHERE Quantity * UnitPrice > 100 的查询快得多,尤其是在Subtotal进行索引时。
3 理解关系
3.1 一对一关系
一对一关系指如果在一个表中有一个记录,那么在另一个表中也会有一个与之匹配的记录。
3.2 零或一对一关系
零或一对一关系在本质上与一对一关系相同,不同的是关系的一方可以选择有一个记录或者没有记录。
在SQL Server中,强制实施零或一对一关系的方式:
◊ 唯一键约束或者主键约束和外键约束的组合。外键约束可以实现在“一”表中必须至少存在一个记录,但是不能确保只存在一个记录(可能有多个记录)。使用主键约束和唯一键约束能确保只有一个记录。
◊ 触发器。
3.3 一对一或一对多关系
这是一种常见的外键关系,通常以主表/从表关系形式出现。
3.4 一对零、一对一或一对多关系
这是另外一个更常见的外键关系,在实现方面的区别在于引用字段(在有外键约束的表中)允许为空;即实际上在“一”表中有一个记录,而在这个引用表(外键约束的从表)中未必有任何匹配的记录。
在SQL server中,实现这种关系的方式:
◊ 外键约束:只需要在作为关系中“多”方的表上声明外键约束,引用作为关系中“一”方的表和列(可以确保在被引用表中只有一方,被外键引用的列必须要有主键约束或者唯一约束)
◊ 触发器:在作为关系中“多”方的表中添加触发器,用于检查在该表中插入或修改任何行在被依赖表(关系中的“一”方)中有一个匹配的行。
3.5 多对多关系
在这种关系中,关系的双方都可以有多个记录匹配。相关的示例是产品和订单的关系。一个特定的订单可能有多个不同的产品,一个特定的产品可以订购多次。
SQL Server没有办法在物理上建立直接的多对多关系,因此通过中间表来组织关系,中间表称为关联表。
Sql Server系列:规范化及基本设计的更多相关文章
- SQL Server 系列文章快速导航(SWF版)
一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软S ...
- SQL Server系列文章目录
SQL Server系列文章目录SQL Server系列文章目录SQL Server系列文章目录SQL Server系列文章目录
- SQL Server系列目录
一.SQL Server基础部分 1 数据库概念及规范化设计 1.1 数据库物理模式设计 1.2 Microsoft SQL Server Management Studio模板资源管理器 2 数据 ...
- Sql Server系列:子查询
1 子查询概念 子查询是嵌套在另一个查询中的普通T-SQL查询.在有一个SELECT语句通过使用小括号创建子查询,作为另一个查询的部分数据或条件的基础. 子查询通常用于满足以下某个需求: ◊ 将一个查 ...
- SQL Server系列
这里整理了我学习SQL Server的全部文章,包括从基础到高级,做一个目录,方便以后查找. SQL Server数据类型 SQL Server中开发常用的数据类型 单表查询和多表查询 一个单表查询的 ...
- [SQL SERVER系列]工作经常使用的SQL整理,实战篇(三)[原创]
工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三) 接着本系列前面两篇继续讨论. 有时 ...
- Sql Server系列:分区表操作
1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...
- Sql Server系列:Microsoft SQL Server Management Studio模板资源管理器
模板资源管理器是Microsoft SQL Server Management Studio的一个组件,可以用来SQL代码模板,使用模板提供的代码,省去每次都要输入基本代码的工作. 使用模板资源管理器 ...
- Sql Server系列:数据库组成及系统数据库
1. 数据库组成 数据库的存储结构分为逻辑存储结构和物理存储结构. ◊ 逻辑存储结构:说明数据库是由哪些性质的信息所组成.SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息 ...
随机推荐
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- Hello Web API系列教程——Web API与国际化
软件国际化是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,在创建不同语言版本时,不需要重新设计源程序代码的软件工程方法.这在很多成熟的软件开发平台中非常常见.对于.net开发 ...
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- 大数据之Yarn——Capacity调度器概念以及配置
试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...
- 喜马拉雅音频下载器 V1.2 支持专辑批量下载 喜马拉雅mp3下载导出 喜马拉雅下载器
出差一个星期回来看邮箱,发现好多网友评论说网站又更新了,老程序不能用了,有热心网友放出修改版的,我就不重复造车了..大家可以去这里下载 http://blog.csdn.net/suqingheang ...
- 免费开源的 .NET 分布式组件库 Exceptionless Foundatio
前言 在互联网时代,分布式应用.系统变得越来越多,我们在使用 .Net 技术构建分布式系统的时候,需要使用到一些组件或者是助手库来帮助我们提高生产力以及应用程序解耦,但是纵观.Net圈,能够符合要求的 ...
- .NET面试题系列[5] - 垃圾回收:概念与策略
面试出现频率:经常出现,但通常不会问的十分深入.通常来说,看完我这篇文章就足够应付面试了.面试时主要考察垃圾回收的基本概念,标记-压缩算法,以及对于微软的垃圾回收模板的理解.知道什么时候需要继承IDi ...
- Spark笔记:RDD基本操作(下)
上一篇里我提到可以把RDD当作一个数组,这样我们在学习spark的API时候很多问题就能很好理解了.上篇文章里的API也都是基于RDD是数组的数据模型而进行操作的. Spark是一个计算框架,是对ma ...