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系列:规范化及基本设计的更多相关文章

  1. SQL Server 系列文章快速导航(SWF版)

    一.前言 在博客园写博客不自不觉已经有5个年头了,一开始只是为了记录工作中遇到的问题和解决办法,后来写的文章不自不觉的侧重在SQL Server方面的技术文章,在2014年1月终于鼓起勇气申请了微软S ...

  2. SQL Server系列文章目录

    SQL Server系列文章目录SQL Server系列文章目录SQL Server系列文章目录SQL Server系列文章目录

  3. SQL Server系列目录

    一.SQL Server基础部分 1  数据库概念及规范化设计 1.1 数据库物理模式设计 1.2 Microsoft SQL Server Management Studio模板资源管理器 2 数据 ...

  4. Sql Server系列:子查询

    1 子查询概念 子查询是嵌套在另一个查询中的普通T-SQL查询.在有一个SELECT语句通过使用小括号创建子查询,作为另一个查询的部分数据或条件的基础. 子查询通常用于满足以下某个需求: ◊ 将一个查 ...

  5. SQL Server系列

    这里整理了我学习SQL Server的全部文章,包括从基础到高级,做一个目录,方便以后查找. SQL Server数据类型 SQL Server中开发常用的数据类型 单表查询和多表查询 一个单表查询的 ...

  6. [SQL SERVER系列]工作经常使用的SQL整理,实战篇(三)[原创]

    工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三) 接着本系列前面两篇继续讨论. 有时 ...

  7. Sql Server系列:分区表操作

    1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...

  8. Sql Server系列:Microsoft SQL Server Management Studio模板资源管理器

    模板资源管理器是Microsoft SQL Server Management Studio的一个组件,可以用来SQL代码模板,使用模板提供的代码,省去每次都要输入基本代码的工作. 使用模板资源管理器 ...

  9. Sql Server系列:数据库组成及系统数据库

    1. 数据库组成 数据库的存储结构分为逻辑存储结构和物理存储结构. ◊ 逻辑存储结构:说明数据库是由哪些性质的信息所组成.SQL Server的数据库不仅仅只是数据的存储,所有与数据处理操作相关的信息 ...

随机推荐

  1. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  2. UIViewController生命周期-完整版

    一.UIViewController 的生命周期 下面带 (NSObject)的方法是NSObject提供的方法.其他的都是UIViewController 提供的方法. load   (NSObje ...

  3. Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系

    在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...

  4. 要想提高PHP的编程效率,你必须知道的要点

    1.当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数.此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储 ...

  5. C++内联函数

    在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数.内联函数作为编译器优化手段的一种技术,在降低 ...

  6. Kafka副本管理—— 为何去掉replica.lag.max.messages参数

    今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...

  7. ASP.NET SignaiR 实现消息的即时推送,并使用Push.js实现通知

    一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...

  8. MATLAB中绘制质点轨迹动图并保存成GIF

    工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...

  9. java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE

    Android发出HTTP请求时出现了这个错误: java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INST ...

  10. Linux硬件IO的优化简介

    Linux硬件IO的优化简介 首先简单介绍下有哪些硬件设备如下(由于硬件种类厂家等各种因素我就不在此多做介绍有兴趣的可以自行学习): 1.CPU:中央处理器,是计算机运算控制的核心部件之一,相当于人的 ...