数据库(数据表)的设计思想介绍(数据库重点)

设计数据库,其实就是设计表(多个表)

数据库设计3范式(3NF):

范式,就是规范,就是指设计数据库需要(应该)遵循的原则。

每个范式,都是用来规定某种结构或数据要求——后一范式都是在前一范式已经满足的情况用来“加强要求”

第一范式(1NF),原子性

原子性:

存储的数据应该具有“不可再分性”。

不良做法示例:

可见,其违反了原则性范式:学生字段的数据存储了多个可分的数据。

修改后为:

第二范式(2NF)唯一性

需要实现每一行数据具有唯一可区分的特性,并不能有部分依赖关系

通常,给一个表加主键(也是推荐做法),就可以做到“唯一可区分”。

但主键有这样情况:

设定一个字段为主键:此时,表示该一个字段的值就可以明确确定一行数据。

设定多个字段为主键:表示只有这多个字段的值都确定后才能确定一行数据。此时也称为“联合主键”

什么叫依赖:

如果确定一个表中的某个数据(A),则就可以确定该表中的其他另一个数据(B),则我们说:B依赖于A。

实际上,一个表只要有主键,则其他非主键一定是依赖于主键的。

什么叫部分依赖

如果确定一个表中的某个数据组合(A,B),则就可以确定该表中的其他另一个数据(C),则我们说:C依赖于(A,B)(此时A,B通常就是做出主键)。

但:如果某个数据D,它只依赖于数据A,或者说,A一确定,则D也可以确定,此时我们就称为“数据D部分依赖于数据A——可见部分依赖是指某个非主键字段,依赖于联合主键字段的其中部分字段。

不良做法:

改良之后:

第三范式(3NF):独立性,消除传递依赖

在一个具有主键的表中,假设主键为A,其必然其他非主键都依赖于该主键,比如:B依赖于A,C依赖于A,D依赖于A。。。。。。

但同时:如果该表中的某个字段B的值一确定,就能够确定另一个字段的值C,则我们称为C依赖于B。

那么,就出现了:

C依赖B,B依赖A——这就是传递依赖。

则消除该传递依赖的的通常做法,就是将C依赖于B的数据,分离到另一个表中。

不良例子:

改良之后:

最后的总结

通常,在实践中,满足3范式只要做到“一个表只存一种数据”基本就可以实现。

另外,范式不是绝对要求,有时候我们为了数据的使用方便,还会(需要)故意违反范式

时间: 2024-08-25 08:57:30

数据库(数据表)的设计思想介绍(数据库重点)的相关文章

MySQL基础/数据库和表的设计

MySQL基础 一:安装MySQL(按步骤操作,如果下载后使用不了,试着用360安全卫士卸载MySQL,清除残留的,方便在下载造成不必要的麻烦:如果这样也不行,那就需要重做系统在进行下载) 二:创建数据库/表 黑窗口:1:输入密码 2:show databases:查看数据库 3:create database 库名:创建库 4:use 库名:使用库 5:create table 表名:创建表( 列名数据类型(约束条件),    //用逗号隔开 ): 6:show tables:查看库里有哪些表

19 MySQL概念 数据库 数据表 数据类型 增加删除修改查询 WHERE Order By Limit

数据库管理系统DBMS 数据库中相关概念 数据库 数据表 记录 字段 数据 登录和退出MySQL客户端 查询自己的MySQL服务器有几个数据库 二.退出MySQL客户端的命令 修改root用户的密码 在MySQL客户端来修改密码(当前账号的密码) 数据库操作 创建数据库 显示所有数据库 删除数据库 选择数据库 更改数据库默认字符集 数据表操作 显示当前数据库中的所有表 创建数据表 显示表的创建 列的常用属性 修改数据表 删除数据表 显示表结构 MySQL数据类型 整型 浮点型 字符型 文本型 日

PHP创建数据库数据表

PHP创建数据库数据表 <?php $con = mysql_connect('localhost', 'root', 'root'); /************************在数据库中创建表*************************/ if (!$con) { die ('连接数据库出错: ' . mysql_error()); } $database="my_db_name"; $sqlDatabase = 'create database '.$data

oracle 的一个大数据表 快速迁移到 Sqlserver2008数据库

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> oracle 的一个大数据表 快速迁移到 Sqlserver2008数据库 - HappyBinhaer的专栏 - 博客频道 - CSDN.NET HappyBinhaer的专栏 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯

Django数据库数据表操作

建立表单 django通过设置类来快速建表,打开models.py 例: from __future__ import unicode_literals from django.db import models # Create your models here. # 新建一个类叫user,其实就是新建一张叫user的表 class user(models.Model): username = models.CharField(max_length = 20) password = models

POSTGRESQL 查看数据库 数据表大小

1.查看数据库大小: select pg_database_size('log_analysis'); ***(Single step mode: verify command)******************************************* select pg_database_size('log_analysis'); ***(press return to proceed or enter x and return to cancel)****************

sqlserver -- 将一个数据库的表复制到另外一个数据库(备忘)

--复制结构+数据 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 select * into Stockholder.dbo.SHInfo from dspring.dbo.HIREMEN --只复制结构 select * into 数据库名.dbo.新表名 from 数据库名.dbo.原表名 where 1=0 后面的条件只要不成立就OK了 Learn From: http://www.cnblogs.com/New-world/archive/20

商品分类筛选条件建模数据表的设计

近端时间,由于商城项目的需求,学习探索了一下商品分类筛选条件.在学习过程中,一贯喜欢参考前人的东西,希望能从中得到一些独特的设计思路.京东.淘宝等大牛对这方面做得非常好,不管是用户体验还是技术方面.我们先看看京东的效果图 个人分析:京东的商品筛选中,每个子类型都对于一个具体的模型,而模型下又分为属性(如:功能)以及属性值集.经过两天的整理,总算成型.现在拿出来跟大家分享一下,有什么不足之处,希望大家不怜赐教. Model表 Attribute表 GoodsAttribute表 商品分类筛选条件建

pg数据库数据表异常挂起

pg数据库即是PostgreSQL数据库. 前几天在一个Java项目中,出现运行Java程序后,pg数据库的数据表异常挂起.而且是在某台电脑上出现的,重装数据库也没用,其它电脑未能复现,是个很奇怪的现象. 异常挂起的主要表现是: 1.使用pgAdmin选中相应的表,会导致pgAdmin未响应,并且很长时间都无法恢复. 2.使用pgAdmin直接sql命令增删查改都无法执行,执行所花时间从几十毫秒一直增长到几分钟,预计会一直增长下去. 3.只有重启PostgreSQL服务才能让出现异常的数据表恢复