zoukankan      html  css  js  c++  java
  • 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没有办法在物理上建立直接的多对多关系,因此通过中间表来组织关系,中间表称为关联表。

  • 相关阅读:
    学习小记: Kaggle Learn
    eclipse 一些快捷键
    Map接口
    学习笔记
    泛型方法 类 接口
    TreeSet
    xml
    Java笔试题目-my
    迭代器三种遍历方法
    线程请求其他线程资源
  • 原文地址:https://www.cnblogs.com/libingql/p/4475121.html
Copyright © 2011-2022 走看看