zoukankan      html  css  js  c++  java
  • 数据库设计范式

    为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

                     

    在实际开发中最为常见的设计范式有三个:

    1.第一范式(确保每列保持原子性)

    第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。

    place table  (primary key: image_path,   地理位置不可分)

    id

    image_path

    country

    city

    district

    time

    1

    /storage/xxx1.jpg

    china

    shenzhen

    NanShan

    2017-10-20

    2

    /storage/xxx2.jpg

    USA

    New York

    null

    2016-9-10

    3

    /storage/xxx3.jpg

    Japan

    Tokyo

    null

    2012-8-30

    2.第二范式(确保表中的每列都和主键相关)

    第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

    face table   (primary key: image_path + personId)

    image_path

    personId

    face_left

    face_top

    width

    height

    /storage/xxx1.jpg

    100

    100

    200

    110

    110

    /storage/xxx1.jpg

    200

    200

    200

    120

    120

    /storage/xxx2.jpg

    300

    300

    300

    100

    100

    /storage/xxx3.jpg

    100

    400

    200

    130

    130

    name table  (primary key: personId)

    personId

    name[用户自定义]

    100

    me

    200

    dad

    300

    mom

    3.第三范式(确保每列都和主键列直接相关,而不是间接相关)

    第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

     

    总结:

    第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;
    通俗的理解是,字段还可以再分吗?如过不能,则是符合1NF的设计。

    第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
    简单的解释,比如你和一个女生约会建立一张表,不用每条约会记录都记录她的身高、体重,将身高体重单独的存在一张表中供查询即可。

    第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。
    打个比方,比如评论表,如果你将用户ID,用户头像都放在这留言表中,就是不合适的了。用户头像是依赖于用户ID,而不依赖该评论。

     

    参考文章: http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html

  • 相关阅读:
    [单选题]<?php$a=array(3=>"Horse",4=>"Dog");print_r(array_merge($a));?>
    [单选题]以下哪一个语句可以返回字符串变量$a的字符数?
    [单选题]下面的代码将返回:
    [单选题]文件上传处理中,$_FILES["file"]["error"]的值等于4是( )
    [单选题]在PHP中,如何确定一个变量是否已被赋值?
    [单选题]自定义函数中,返回函数值的关键字是
    [单选题]当需要传输大量的表格数据时,使用如下哪种提交方式是最合适的?
    [单选题]php中,( )函数接受一个Socket连接?
    [单选题]下面的代码会输出什么?
    Node.js Express博客项目实战 之新闻分类管理
  • 原文地址:https://www.cnblogs.com/nicoleTeng/p/7723265.html
Copyright © 2011-2022 走看看