zoukankan      html  css  js  c++  java
  • 数据库设计学习(一)

    三大范式

    第一范式(1NF):表中的每一个字段只能存放单一的值,而且每条记录都要能利用一个惟一的主键来加以识别。

    第二范式(2NF):表中的记录的所有字段都要和该表的主键有依赖关系;如果有些字段只和主键的一部分相关的话,就得把它们独立出来变成另一个表。如果一个表的主键只有一个字段的话,它就是符合第二范式的。

    一个表符合第二范式,当且仅当:
    它符合第一范式
    所有的非主键字段都依赖于主键

    第三范式(3NF):所有的非键字段都只和而且必须和候选键有相关性,也就是说所有非键属性互相之间应该是无关的。

    数据库设计不必完全按三大范式,有时候甚至需要故意反范式。举例来说:有时

    候必须存储一些多值字段:如电影信息表的演员列表,演员的个数是不确定的,

    所以如果使用YAML或json技术将演员信息编码,即方便读取演员列表又可以任意

    删除和添加演员。使用Python的话还可以用Pickle,方法如下:
    DB  <===>  Pickle  <===> Dict  
    DB  <===>  Pickle  <===> Memcache <===> Dict
    使用Pickle的缺点是使用数据在数据库中不可读,有时候不方便。
    可以用范式的方式去思考关系,但实践起来的时候一定不要被这些东西束缚住手脚。

    NoSQL数据库革命:http://www.cnbeta.com/articles/88079.htm
    NoSQL数据存储技术的特点:
    1 适用于Web应用;
    2 读/写速度比RMDBS快;
    3 运行在便宜的PC服务器集群上;
    4 开源。

    Key/value数据库
    http://www.slideshare.net/iso1600/key-value-store
    http://www.slideshare.net/qingfeng/tctt-1952460

    无模式数据库MongoDB:http://www.mongodb.org/display/DOCS/Home
    集合了RDBMS与key/value数据库的优点。
  • 相关阅读:
    内存中的堆和栈
    数据库——关系型数据库
    如何创建一个进程,如何进程调用进程
    浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
    Moon.Orm 5.0(MQL版)使用指南
    初学 快速幂 的理解
    2016 杭电
    2015 偶数求和 AC 杭电
    2014 青年歌手大赛 AC
    C语言初学 数组 打印菱形
  • 原文地址:https://www.cnblogs.com/crafter/p/2262928.html
Copyright © 2011-2022 走看看