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. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  2. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  3. solr_架构案例【京东站内搜索】(附程序源代码)

    注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...

  4. ExtJS 4.2 第一个程序

    本篇介绍如何创建一个ExtJS应用程序.并通过创建目录.导入文件.编写代码及分析代码等步骤来解释第一个ExtJS程序. 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index ...

  5. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  6. 如何利用ansible callback插件对执行结果进行解析

    最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...

  7. 现代3D图形编程学习-基础简介(3)-什么是opengl (译)

    本书系列 现代3D图形编程学习 OpenGL是什么 在我们编写openGL程序之前,我们首先需要知道什么是OpenGL. 将OpenGL作为一个API OpenGL 通常被认为是应用程序接口(API) ...

  8. npm 使用小结

    本文内容基于 npm 4.0.5 概述 npm (node package manager),即 node 包管理器.这里的 node 包就是指各种 javascript 库. npm 是随同 Nod ...

  9. yaf的简单入门

    1.目录结构: 2.入口文件 入口文件是所有请求的入口,一般都借助于rewrite规则,把所有的请求都重定向到这个入口文件. 一个经典的入口文件  public/index.php 3.重写规则 需要 ...

  10. PHP 设计模式概述

    一.设计模式(Design pattern)是什么? 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. ...