数据库设计原则

一、前言

在平时的web系统开发中,数据库是必不可少的一部分,没有了数据库,程序处理的数据就不知如何更好安放。然而数据库没有很好的设计,使用起来也是很不好用的。本节就介绍一下数据库得到基础知识和设计原则。

二、为什么需要进行数据库设计

修建茅屋需要设计吗?

 

修建大厦需要设计吗?

结论:当数据库比较复杂时我们需要设计数据库

在大型的实际项目中,要存储的数据的种类非常多,数据量也非常大。我们面对的问题有:
    1、怎么保证有用数据不被遗漏?
    2、怎么存储更节约存储空间?
    3、用多少张表来存储数据比较合适(应该包含哪些表)?
    4、每张表存储什么数据比较合适(表应该包含哪些字段)?
    5、从多表之间的关系是怎样的?
    6、怎样保证数据的效率?
    7、怎么防止数据的不一致性?
    8、如果要进一步扩展项目,怎么样方便扩展?
    9、数据库怎样设计,可以让程序更容易实现? 

良好的数据库设计
节省数据的存储空间
能够保证数据的完整性
方便进行数据库应用系统的开发


糟糕的数据库设计
数据冗余、存储空间浪费
内存空间浪费
数据更新和插入的异常
 

三、数据库基础知识

实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。它也可以是虚拟的,比如说“老师与学校的关系”。

属性:实体所具有的某一特性,也称为字段或数据项,属性包括属性名、属性值和属性值类型三部分内容。比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。

元组:表中的一行就是一个元组,也称为记录。
分量:元组的某个属性值。在一个关系数据库中,它是一 个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。
码:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。
外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码,也称为外键。
主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

实体与实体之间的关系

实体间的关系是错综复杂的,但就两个实体的关系来说,
主要有以下3种情况:
一对一的关系(1:1):对于实体集A中的每一个实体,实体集B中至多有一个实体与之关联;记为1:1。
例如:一个中华人民共和国合法公民只有一张身份证,而一张身份证只属
于一个公民,所以是一对一的关系。

一对多(1:N)或多对一(N:1)的关系:对于实体集A中的每一个实体,实体集B中有N个实体与之关联;返过来,对实体集B中的每一个实体,实体集A中至多有一个实体与多联系。
例如:一个班内有多名学员,一个学员只能属性一个班;即班级与学员之
间具有一对多的关系;返过来说,学员与班级之间具有多对一的关系。

多对多(M:N)的关系:
例如:学员在选课时,一个学员可以选多门课程,一门课程也可以被多个
学生选取,则学员与课程之间具有多对多的关系。
 

四、数据库设计原则

仅有好的RDBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构

规范化的三个级别,范式是具有最小冗余的表结构。这些范式是:
第一范式(1st NF -First  Normal Fromate)
第二范式(2nd NF-Second  Normal Fromate)
第三范式(3rd NF- Third  Normal Fromate)

第一范式的目标是:确保每列的原子性,属性不可分

如果每列(或者每个属性值)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

第二范式其目标是:确保表中每列都和主键相关(要求每个表只描述一件事情); 例如:该表主要用来描述订单,所以将订单编号设为主键,定购日期和订单编号主键列相关,但产品编号列和主键列没有直接的关联,应将该列删除,放入产品表中。

 

第三范式其目标是:确保每列都和主键列直接相关,而不是间接相关; 例如:“顾客姓名”和“顾客编号”相关,“顾客编号”和“订单编”号又相关,最后结果:“顾客姓名”也和“订单编号”相关。为满足3NF,应去掉“顾客姓名”列,将此列放入客户表中

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋力向前123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值