问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请大伙给我解释一下数据库设计的基本原则!

发布网友 发布时间:2022-04-29 23:17

我来回答

5个回答

懂视网 时间:2022-04-08 14:28

TABLE "SAMPLE" ( "PRJNUM" INTEGER NOT NULL, "PRJNAME" VARCHAR(200), "EMYNUM" INTEGER NOT NULL, "EMYNAME" VARCHAR(200), "SALCATEGORY" CHAR(1), "SALPACKAGE" INTEGER) IN "USERSPACE1"; ALTER TABLE "SAMPLE" ADD PRIMARY KEY ("PRJNUM", "EMYNUM"); Insert into SAMPLE(PRJNUM, PRJNAME, EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE) values(100001, ‘TPMS‘, 200001, ‘Johnson‘, ‘A‘, 2000), (100001, ‘TPMS‘, 200002, ‘Christine‘, ‘B‘, 3000), (100001, ‘TPMS‘, 200003, ‘Kevin‘, ‘C‘, 4000), (100002, ‘TCT‘, 200001, ‘Johnson‘, ‘A‘, 2000), (100002, ‘TCT‘, 200004, ‘Apple‘, ‘B‘, 3000);
表1-1

技术分享

考察表1-1,我们可以看到,这张表一共有六个字段,分析每个字段都有重复的值出现,也就是说,存在数据冗余问题。这将潜在地造成数据操作(比如删除、更新等操作)时的异常情况,因此,需要进行规范化。


 

第一范式

参照范式的定义,考察上表,我们发现,这张表已经满足了第一范式的要求。

1、因为这张表中字段都是单一属性的,不可再分;

2、而且每一行的记录都是没有重复的;

3、存在主属性,而且所有的属性都是依赖于主属性;

4、所有的主属性都已经定义

事实上在当前所有的关系数据库管理系统(DBMS)中,都已经在建表的时候强制满足第一范式。因此,这张SAMPLE表已经是一张满足第一范式要求的表。考察表1-1,我们首先要找出主键。可以看到,属性对<Project Number, Employee Number>是主键,其他所有的属性都依赖于该主键。


 

从一范式转化到二范式

根据第二范式的定义,转化为二范式就是消除部分依赖。

考察表1-1,我们可以发现,非主属性<Project Name>部分依赖于主键中的<Project Number>; 非主属性<Employee Name>,<Salary Category>和<Salary package>都部分依赖于主键中的<Employee Number>;

表1-1的形式,存在着以下潜在问题:

1. 数据冗余:每一个字段都有值重复;

2. 更新异常:比如<Project Name>字段的值,比如对值"TPMS"了修改,那么就要一次更新该字段的多个值;

3. 插入异常:如果新建了一个Project,名字为TPT, 但是还没有Employee加入,那么<Employee Number>将会空缺,而该字段是主键的一部分,因此将无法插入记录;

Insert into SAMPLE(PRJNUM, PRJNAME, EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE) values(100003, ‘TPT‘, NULL, NULL, NULL, NULL)

技术分享

4. 删除异常:如果一个员工 200003, Kevin 离职了,要将该员工的记录从表中删除,而此时相关的Salary信息 C 也将丢失, 因为再没有别的行纪录下 Salary C的信息。

Delete from sample where EMYNUM = 200003
Select distinct SALCATEGORY, SALPACKAGE from SAMPLE

因此,我们需要将存在部分依赖关系的主属性和非主属性从满足第一范式的表中分离出来,形成一张新的表,而新表和旧表之间是一对多的关系。由此,我们得到:

CREATE TABLE "PROJECT" (
  "PRJNUM" INTEGER NOT NULL, 
  "PRJNAME" VARCHAR(200))
  IN "USERSPACE1";

ALTER TABLE "PROJECT" 
 ADD PRIMARY KEY
 ("PRJNUM");

Insert into PROJECT(PRJNUM, PRJNAME) values(100001, ‘TPMS‘), (100002, ‘TCT‘);
表1-2

技术分享

表 1-3
CREATE TABLE "EMPLOYEE" (
  "EMYNUM" INTEGER NOT NULL, 
  "EMYNAME" VARCHAR(200), 
"SALCATEGORY" CHAR(1), 
"SALPACKAGE" INTEGER)
  IN "USERSPACE1";

ALTER TABLE "EMPLOYEE" 
 ADD PRIMARY KEY
 ("EMYNUM");

Insert into EMPLOYEE(EMYNUM, EMYNAME, SALCATEGORY, SALPACKAGE) values(200001,
‘Johnson‘, ‘A‘, 2000), (200002, ‘Christine‘, ‘B‘, 3000), (200003, ‘Kevin‘, ‘C‘,
4000), (200004, ‘Apple‘, ‘B‘, 3000);

Employee Number Employee Name Salary Category Salary Package
200001 Johnson A 2000
200002 Christine B 3000
200003 Kevin C 4000
200004 Apple B 3000
CREATE TABLE "PRJ_EMY" (
  "PRJNUM" INTEGER NOT NULL, 
  "EMYNUM" INTEGER NOT NULL)
  IN "USERSPACE1";

ALTER TABLE "PRJ_EMY" 
 ADD PRIMARY KEY
 ("PRJNUM", "EMYNUM");

Insert into PRJ_EMY(PRJNUM, EMYNUM) values(100001, 200001), (100001, 200002),
(100001, 200003), (100002, 200001), (100002, 200004);

同时,我们把表1-1的主键,也就是表1-2和表1-3的各自的主键提取出来,单独形成一张表,来表明表1-2和表1-3之间的关联关系:

表 1-4

技术分享

这时候我们仔细观察一下表1-2, 1-3, 1-4, 我们发现插入异常已经不存在了,当我们引入一个新的项目 TPT 的时候,我们只需要向表1-2 中插入一条数据就可以了, 当有新人加入项目 TPT 的时候,我们需要向表1-3, 1-4 中各插入一条数据就可以了。虽然我们解决了一个大问题,但是仔细观察我们还是发现有问题存在。


 

从二范式转化到三范式

考察表前面生成的三张表,我们发现,表1-3存在传递依赖关系,即:关键字段< Employee Number > --> 非关键字段< Salary Category > -->非关键字段< Salary Package >。而这是不满足三范式的规则的,存在以下的不足:

1、 数据冗余:<Salary Category>和<Salary Package>的值有重复;

2、 更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况;

3、 删除异常:同样的,如果员工 200003 Kevin 离开了公司,会直接导致 Salary C 的信息的丢失。

Delete from EMPLOYEE where EMYNUM = 200003
Select distinct SALCATEGORY, SALPACKAGE from EMPLOYEE

因此,我们需要继续进行规范化的过程,把表1-3拆开,我们得到:

表 1-5

技术分享

表 1-6

技术分享

这时候如果 200003 Kevin 离开公司,我们只需要从表 1-5 中删除他就可以了, 存在于表1-6中的Salary C信息并不会丢失。但是我们要注意到除了表 1-5 中存在 Kevin 的信息之外, 表1-4中也存在 Kevin 的信息, 这很容易理解, 因为 Kevin 参与了项目 100001, TPMS, 所以当然也要从中删除。

至此,我们将表1-1经过规范化步骤,得到四张表,满足了三范式的约束要求,数据冗余、更新异常、插入异常和删除异常。

在三范式之上,还存在着更为严格约束的BC范式和四范式,但是这两种形式在商业应用中很少用到,在绝大多数情况下,三范式已经满足了数据库表规范化的要求,有效地解决了数据冗余和维护操作的异常问题。


 

结束语

在本文描述的过程中,我们通过结合实例的方法,通俗地演绎了数据表规范化的过程,并展示了在此过程中数据冗余、数据库操作异常等问题是如何得到解决的。

在具体的工程应用中,运用数据库规范化的方法来设计数据库表,将是具有现实意义的。

参考资料

  • Database Normalization Basics:数据库规范化基础原则
  • Normalization principles:数据库规范化原则和范式定义

  •  转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0605jiangt/

    规范化-数据库设计原则

    标签:

    热心网友 时间:2022-04-08 11:36

    数据库设计的三范式所谓范式,是关系型数据库关系模式规范化的标准,从规范化的宽松到严格,分别为不同的范式,通常使用的有第一范式、第二范式、第三范式及BC范式等。范式是建立在函数依赖基础上的。

    函数依赖

    定义:设有关系模式R(U),X和Y是属性集U的子集,函数依赖是形为X→Y的一个命题,对任意R中两个元组t和s,都有t[X]=s[X]蕴涵t[Y]=s[Y],那么FD X→Y在关系模式R(U)中成立。X→Y读作‘X函数决定Y’,或‘Y函数依赖于X’。通俗的讲,如果一个表中某一个字段Y的值是由另外一个字段或一组字段X的值来确定的,就称为Y函数依赖于X。函数依赖应该是通过理解数据项和企业的规则来决定的,根据表的内容得出的函数依赖可能是不正确的。

    第一范式(1NF)

    定义:如果关系模式R的每个关系r的属性都是不可分的数据项,那么就称R是第一范式的模式。
      简单的说,每一个属性都是原子项,不可分割。1NF是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不称为关系型数据库。关系数据库设计研究的关系规范化是在1NF之上进行的。

    第二范式(2NF)

    定义:如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么就称R是第二范式。
    简单的说,第二范式要满足以下的条件:首先要满足第一范式,其次每个非主属性要完全函数依赖与候选键,或者是主键。也就是说,每个非主属性是由整个主键函数决定的,而不能由主键的一部分来决定。举个例子:
      有股票日行情表的主键是股 票代码和交易日期组成。非主属性中有收盘价和成交量等,都是由主键,即股票代码和交易日期函数决定的,单独的股票代码或者交易日期都不能函数决定这些非主 属性。如果这个表中有非主属性股票简称,则股票简称是可以由股票代码来函数决定的,这样股票简称这个非主属性就不是完全函数依赖于候选键,这样的设计就不 满足第二范式。

    第三范式(3NF)
    定义:如果关系模式R是2NF,且关系模式R(U,F)中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式。
    简单的说,第三范式要满足以下的条件:首先要满足第二范式,其次非主属性之间不存在函数依赖。由于满足了第二范式,表示每个非主属性都函数依赖于主键。如果非主属性之间存在了函数依赖,就会存在传递依赖,这样就不满足第三范式。
    举 个例子:在股票基本情况表中,主键是股票代码,有非主属性所属一级行业和所属二级行业。根据业务规则,所属二级行业能够函数决定所属一级行业,这就表示存 在这样一种关系:股票代码函数决定所属二级行业,所属二级行业函数决定所属一级行业,这就形成了传递依赖,这样的设计就不符合第三范式。不过在实际运用 中,为查询和使用的方便,有时也会违反第三范式。如上例,如果没有所属一级行业的属性,需要查询所属一级行业的相关股票,需要查询时使用函数来从二级行业 中函数生成所属一级行业,使用性能上会受影响。所以通常会加上所属一级行业的属性。

    BC范式(BCNF)

    BC范式是第三范式的增强版,不过也有人说是直接从1NF发展过来的,即每个属性,包括主属性或非主属性,都完全依赖于候选键,并且不存在传递依赖情况。

    热心网友 时间:2022-04-08 12:54

    设计数据库不应该有这些: 1数据冗余 2不一致性 3插入异常 4删除异常 这图就出现了问题 如人工智能的学分不一致 有两个文化学 这就出现了以上的问题 所以要杜绝 我们可以这样分为两个表 如下:右边的表只要把人工智能的删除一个就好了(画错了 不好意思) 在就是函数的一些关系 如函数依赖 : v函数依赖 设R(U)是一个属性集U上的关系,X和Y是U的子集。如果属性集合X中每个属性的值构成的集合唯一地决定了属性集合Y中每个属性的值构成的集合,则属性集合Y函数依赖于属性集合X,计为:X→Y 如下表所示,知道了“课程名”的值,即可知道“授课学时”的值。称“授课学时”函数依赖于“课程名”,或“课程名”可以决定“授课学时”,记作课程名→授课学时。 还有这个 v部分函数依赖:如果非主属性B函数依赖于构成某个候选关键字的一组主属性A的某一个真子集,则称B部分函数依赖于A。 v如“学分”函数依赖于主关键字{学号、课程}。但决定“学分”的只是“课程”,与“学号”无关,则称“学分”部分函数依赖于{学号、课程} 。 传递关系 : v传递函数依赖的关系:在R (U)中,如存在X,Y,Z包含于U ,且满足:X—>Y ,Y—>Z,则称Z传递函数依赖于X。 v学生住宿的楼号依赖于学号,学生应交的住宿费是由楼号决定的,即“收费”依赖于“楼号”,“楼号”依赖于“学号”,则“收费”传递函数依赖于“学号”。 接下来的就是要符合范式:第一范式: 任何符合关系定义的表即满足第一范式。 IDNameSexAgeMaleFemale101张三Y 20102李四 Y21v第二范式 �0�5定义:如果一个关系不存在部分依赖关系,那么该关系就属于第二范式。 �0�5 凡是以单个属性作为主关键字的关系自动就是第二范式。因为主关键字只有一个,不会存在部分依赖的情况。因此,第二范式只是针对主关键字是组合属性的关系。 第三范式 v定义:一个关系如果是第二范式的,并且没有传递依赖关系,则该关系就是第三范式。 v每个非主属性不部分依赖于关键字,也不传递依赖于关键字的关系。 关系规范化的目的:解决关系模式中存在的插入、删除异常,以及数据冗余问题, 基本思想:围绕函数依赖的主线,对一个关系模式进行分解,使关系从较低级范式变换到较高级范式。 以上也就是设计数据库基本注意的问题 我也是初学者 只能帮忙这些不知道是否对你有用!

    热心网友 时间:2022-04-08 14:29

    如果完全按照3个范式,不但对数据库服务器是一个考验,对统计数据也是一种考验哈当你的数据是千万级的时候就会知道其实是个噩梦

    热心网友 时间:2022-04-08 16:20

    这个很抽象!
    数据库设计的基本原则是

    数据库设计的基本原则是规范化、一致性、性能需求等。1、规范化(Normalization)。规范化是数据库设计的基本原则之一。它的目的是消除数据冗余和数据依赖问题,使数据库结构更加规范化和高效。通过将数据分解为更小的关联表,确保每个表只包含与其主键直接相关的数据。规范化有助于减少数据重复、提高数据一致...

    简述数据库系统构成及数据库设计的原则。

    数据库设计的基本原则是:(1)简单性。即所创建的数据结构应尽可能直观,并且使得用户易于理解。因为数据结构越简单,则越容易维护。(2)非冗余性。即在数据库中没有重复的属性、记录和文件。因为如果出现冗余,则就可能会产生数据的不一致性,而且也浪费了存储空间。非冗余性是一个很高的目标,要完全消除...

    数据库设计原则

    1)一致性原则:对数据来源进行统一、系统的分析与设计,协调好各种数据源,保证数据的一致性和有效性。2)完整性原则:数据库的完整性是指数据的正确性和相容性。要防止合法用户使用数据库时向数据库加入不合语义的数据。对输入到数据库中的数据要有审核和约束机制。3)安全性原则:数据库的安全性是指保护...

    数据库设计的基本原则有哪些

    数据库设计的基本原则:(1)把具有同一个主题的数据存储在一个数据表中,“一表一用”。(2)尽量消除冗余,提高访问数据库的速度。(3)一般要求数据库设计达到第三范式,多对多,最大限度消除了数据冗余、修改异常、插入异常、删除异常,基本满足关系规范化的要求。(4)关系数据库中,各个数据表之...

    请大伙给我解释一下数据库设计的基本原则!

    简单的说,每一个属性都是原子项,不可分割。1NF是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不称为关系型数据库。关系数据库设计研究的关系规范化是在1NF之上进行的。第二范式(2NF)定义:如果关系模式R是1NF,且每个非主属性完全函数依赖于候选键,那么就称R是第二范式。

    数据库设计原则

    在设计本系统的数据库时,一系列基本原则至关重要,它们确保了数据的稳定、安全和可靠性。首先,一致性原则强调对所有数据源进行系统性的分析和整合,确保数据来源的一致性和有效性,避免冲突和错误。完整性原则关注的是数据的准确性和一致性,通过设定审核和约束机制,防止非法或不一致的数据录入。这确保了...

    数据库设计:掌握核心原则与步骤

    数据库设计是数据组织、存储和访问的关键,下面将为你介绍数据库设计的基本原则和主要步骤。🎯聚焦同一主题确保相关数据集中存储,便于查找和管理。🔍消除冗余提高数据库性能,确保数据准确无误。🔗遵循第三范式规范关系,减少数据冗余和其他异常问题。👥定义明确的关系在多对多...

    如何进行数据库的设计?

    I.R.Palmer方法:把数据库设计当成一步接一步的过程 (2)计算机辅助设计 ORACLE Designer 2000 SYBASE PowerDesigner四、数据库设计的基本步骤 数据库设计的过程(六个阶段) 1.需求分析阶段 准确了解与分析用户需求(包括数据与处理) 是整个设计过程的基础,是最困难、最耗费时间的一步 2.概念结构设计阶段 是整个数据...

    数据库设计的基本步骤

    数据库设计的基本原则:1. 一致性原则 确保数据来源的统一性和系统性分析,协调不同数据源,以维护数据的一致性和有效性。2. 完整性原则 数据库的完整性是指数据的正确性和相容性。设计时需防止用户输入无效或不符合语义的数据,确保数据输入过程的审核和约束。3. 安全性原则 安全性原则要求保护数据库...

    MySQL创建表的基本原则MySQL中创建表的原则

    MySQL创建表的基本原则 MySQL是一个开源的关系型数据库管理系统,是应用最广泛的数据库之一。在MySQL中,创建表是首要工作,因为数据表是数据存储的基本单位。本文将介绍MySQL创建表的基本原则。1. 设计数据表结构 数据表需要根据需求来设计,因此在创建表之前,需要对数据进行分析和设计。这样可以确保数据表...

    简述数据库设计的基本原则 数据库设计的主要原则 数据库设计三大原则 数据库设计四大原则 数据库设计五大原则 简述数据库设计的基本步骤 数据库设计原则是什么 数据库设计选择原则 空间数据库设计原则
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    设置朋友圈不让他看,他还能看见吗 微信里面设置不让某人看,那他看的到吗? 不让他看我的朋友圈他还能看到吗! 舒淇从小被家暴,她说"有些衣服,脱了就再也穿不上了",咋回事? 舒淇星路历程 舒淇自曝悲惨童年经历 盐桥原电池 负极的Zn 为什么会失电子 ZnSo4的作用又是什么 国产机械表哪个品牌值得买?这三大品牌设计品质都出众;好评高 关于双液原电池的原理有盐桥的 哪个品牌的机械表好 一个男人说,好吧,不打扰你了,什么意思 “不打扰你了”有什么意思? qq扩列人人气高有什么收益吗? 一厢情愿不打扰两情相悦不放弃是什么意思? 男生说“一点也不打扰”是什么意思? 当男生对你说:不打扰你了。是什么意思? 不打扰你了的真正含义是什么? 数据库设计规范化的五个要求 不打扰你了是什么意思? 男生说不再打扰了是放弃了吗? 为什么压缩软件压缩文件后,大小基本不变呢 为什么用了压缩文件压缩了,大小基本没变呢? 压缩之后文件没变小怎么回事儿 为什么我用压缩软件,压缩一个文件,可是大小没有变小 为什么用压缩软件把文件压缩后期大小还是不变? winrar,360压缩,快压之类的可以压缩视频文件吗?为什么我压缩后大小几乎没变化? 我下载了一个360压缩软件想压缩一个视频文件但文件大小压缩后并没有... 滚筒洗衣机的门锁上了,洗衣机坏了,怎么开门有没有强制开锁的措施,洗衣机是松下的 中国是日本面积的几倍? 如何减弱手机的gps信号,使得手机的,gps信号变弱? 男朋友说:我们现在都不打扰对方 是什么意思? 4、 设计数据库有哪些基本步骤?各个步骤中需要注意的分别是哪些问题 梦见跟前夫离婚,自己哭得死去活来 斗鱼强哥怎么不直播了? 斗鱼强哥是什么梗,为什么长得这么像弱智还那么多人看 强哥在斗鱼几点直播 斗鱼老狼怎么停播了吗? 石药集团股票是港股吗 斗鱼阿力为啥不直播了 石药集团恩必普药业有限公司怎么样? 斗鱼十八佳怎么不播了,几天没看他上播,今天去斗鱼发现居然搜不到他了? 石药控股集团河北永丰药业有限公司怎么样? 魔芋怎样做好吃? 请教各位大师魔芋怎么做比较好吃 魔芋怎么做好吃,魔芋的做法大全 搜狗输入法如何显示浮标? 我被封了,登不上去如何解封? 怎样把搜狗设置到悬浮窗?在线等。如图。 我的被永久封号了,怎么办? 你好,我的给封了,怎么能解封?