zoukankan      html  css  js  c++  java
  • sql server 2008学习7 规范化和其他基本设计问题

    第一范式: 

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

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

    原始表结构:

    image

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

    imageimage

    第二范式:

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

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

    第三范式:

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

    第三范式的规则:

    1.首先实现第二范式.

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

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

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

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

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

    2.不只一个候选键

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

    关系:

    有三种主要关系:

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

    一对一关系:

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

    零或一对一关系:

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

    一对一或一对多关系:

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

    多对多关系:

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

    image

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

    反规范化:

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

    超出规范化的一些过则

    1. 保持简单.要避免在数据库中引入 的复杂性超出真正所需.最低要求的方法通常产生的结果不仅更容易编辑,而且运行更快.
    2. 选择数据类型. 比如 需要存储月份,1-12 那么数据类型 选择 单字节的 tinyint足够了,没必要选择int.
  • 相关阅读:
    oracle内存粒度
    知乎--软件架构设计 性能系列
    VAMEI 图解的博客
    泰晓科技
    高性能高并发系统的稳定性保障
    如何提高Linux下块设备IO的整体性能?
    Unix操作系统LD_PRELOAD简介
    浅析keepalived vip漂移原理与VRRP协议
    SQL:将查询结果插入到另一个表的三种情况
    C# Graphics中有关绘图质量的几个Mode
  • 原文地址:https://www.cnblogs.com/soundcode/p/2679996.html
Copyright © 2011-2022 走看看