您当前的位置:首页 > 养生 > 内容

数据库设计规范(简述数据库设计的要求)

本文目录

  • 简述数据库设计的要求
  • 如何在数据库设计是规范成第三范式
  • 如何合理和有效的进行数据库设计
  • 如何进行数据库的设计
  • SQL数据库设计规范及如何设置外键
  • 数据库的规范化设计方法~
  • 求数据库字段类型设计规范
  • 数据库规范设计
  • 数据库完整性的设计原则
  • 数据库规范设计方法将数据库设计划分的六个阶段是什么

简述数据库设计的要求

数据库设计包括六个主要步骤:1、需求分析:了解用户的数据需求、处理需求、安全性及完整性要求;2、概念设计:通过数据抽象,设计系统概念模型,一般为E-R模型;3、逻辑结构设计:设计系统的模式和外模式,对于关系模型主要是基本表和视图;4、物理结构设计:设计数据的存储结构和存取方法,如索引的设计;5、系统实施:组织数据入库、编制应用程序、试运行;6、运行维护:系统投入运行,长期的维护工作。

如何在数据库设计是规范成第三范式

你好,很高兴能为您解答,请耐心看完,记得采纳,谢谢.第一范式:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。第二范式:第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。第三范式:满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的;同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。反之则是乱七八糟,不仅给数据库的编程人员制造麻烦,而且面目可憎,可能存储了大量不需要的冗余信息。

如何合理和有效的进行数据库设计

通常情况下,可以从两个方面来判断数据库设计的是否规范:1)一是看看是否拥有大量的窄表 窄表往往对于OLTP比较合适,符合范式设计原则2)宽表的数量是否足够的少。 所谓的宽表就是字段比较多的表,包含的维度层次比较多,造成冗余也比较多,毁范式设计,但是利于取数统计若符合这两个条件,我们可以说数据库设计的比较好.当然这是两个泛泛而谈的指标。为了达到数据库设计规范化的要求,一般来说,需要符合以下五个要求。要求一:表中应该避免可为空的列。虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。数据库在处理的时候,需要进行特殊的处理。如此的话,就会增加数据库处理记录的复杂性。当表中有比较多的空字段时,在同等条件下,数据库处理的性能会降低许多。所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避免。若确实需要的话,我们可以通过一些折中的方式,来处理这些空字段,让其对数据库性能的影响降低到最少。要求二:表不应该有重复的值或者列。如现在有一个进销存管理系统,这个系统中有一张产品基本信息表中。这个产品开发有时候可以是一个人完成,而有时候又需要多个人合作才能够完成。所以,在产品基本信息表产品开发者这个字段中,有时候可能需要填入多个开发者的名字。如进销存管理中,还需要对客户的联系人进行管理。有时候,企业可能只知道客户一个采购员的姓名。但是在必要的情况下,企业需要对客户的采购代表、仓库人员、财务人员共同进行管理。因为在订单上,可能需要填入采购代表的名字;可是在出货单上,则需要填入仓库管理人员的名字等等。为了解决这个问题,有多种实现方式。但是,若设计不合理的话在,则会导致重复的值或者列。如我们也可以这么设计,把客户信息、联系人都放入同一张表中。为了解决多个联系人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等。若还有第三联系人、第四联系人等等,则往往还需要加入更多的字段。所以,我们在数据库设计的时候要尽量避免这种重复的值或者列的产生。笔者建议,若数据库管理员遇到这种情况,可以改变一下策略。如把客户联系人另外设置一张表。然后通过客户ID把供应商信息表跟客户联系人信息表连接起来。也就是说,尽量将重复的值放置到一张独立的表中进行管理。然后通过视图或者其他手段把这些独立的表联系起来。要求三:表中记录应该有一个唯一的标识符。在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个ID号来唯一的标识行记录,而不要通过名字、编号等字段来对纪录进行区分。每个表都应该有一个ID列,任何两个记录都不可以共享同一个ID值。另外,这个ID值最好有数据库来进行自动管理,而不要把这个任务给前台应用程序。否则的话,很容易产生ID值不统一的情况。另外,在数据库设计的时候,最好还能够加入行号。如在销售订单管理中,ID号是用户不能够维护的。但是,行号用户就可以维护。如在销售订单的行中,用户可以通过调整行号的大小来对订单行进行排序。通常情况下,ID列是以1为单位递进的。但是,行号就要以10为单位累进。如此,正常情况下,行号就以10、20、30依次扩展下去。若此时用户需要把行号为30的纪录调到第一行显示。此时,用户在不能够更改ID列的情况下,可以更改行号来实现。如可以把行号改为1,在排序时就可以按行号来进行排序。如此的话,原来行号为30的纪录现在行号变为了1,就可以在第一行中显示。这是在实际应用程序设计中对ID列的一个有效补充。这个内容在教科书上是没有的。需要在实际应用程序设计中,才会掌握到这个技巧。要求四:数据库对象要有统一的前缀名。一个比较复杂的应用系统,其对应的数据库表往往以千计。若让数据库管理员看到对象名就了解这个数据库对象所起的作用,恐怕会比较困难。而且在数据库对象引用的时候,数据库管理员也会为不能迅速找到所需要的数据库对象而头疼。其次,表、视图、函数等最好也有统一的前缀。如视图可以用V为前缀,而函数则可以利用F为前缀。如此数据库管理员无论是在日常管理还是对象引用的时候,都能够在最短的时间内找到自己所需要的对象。要求五:尽量只存储单一实体类型的数据。这里将的实体类型跟数据类型不是一回事,要注意区分。这里讲的实体类型是指所需要描述对象的本身。笔者举一个例子,估计大家就可以明白其中的内容了。如现在有一个图书馆里系统,有图书基本信息、作者信息两个实体对象。若用户要把这两个实体对象信息放在同一张表中也是可以的。如可以把表设计成图书名字、图书作者等等。可是如此设计的话,会给后续的维护带来不少的麻烦。如当后续有图书出版时,则需要为每次出版的图书增加作者信息,这无疑会增加额外的存储空间,也会增加记录的长度。而且若作者的情况有所改变,如住址改变了以后,则还需要去更改每本书的记录。同时,若这个作者的图书从数据库中全部删除之后,这个作者的信息也就荡然无存了。很明显,这不符合数据库设计规范化的需求。遇到这种情况时,笔者建议可以把上面这张表分解成三种独立的表,分别为图书基本信息表、作者基本信息表、图书与作者对应表等等。如此设计以后,以上遇到的所有问题就都引刃而解了。

如何进行数据库的设计

数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。 在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。一、数据库和信息系统 (1)数据库是信息系统的核心和基础,把信息系统中大量的数据按一定的模型组织起来,提供存储、维护、检索数据的 功能,使信息系统可以方便、及时、准确地从数据库中获得所需的信息。 (2)数据库是信息系统的各个部分能否紧密地结合在一起以及如何结合的关键所在。 (3)数据库设计是信息系统开发和建设的重要组成部分。 (4)数据库设计人员应该具备的技术和知识: 数据库的基本知识和数据库设计技术 计算机科学的基础知识和程序设计的方法和技巧 软件工程的原理和方法 应用领域的知识二、数据库设计的特点 数据库建设是硬件、软件和干件的结合 三分技术,七分管理,十二分基础数据 技术与管理的界面称之为“干件” 数据库设计应该与应用系统设计相结合 结构(数据)设计:设计数据库框架或数据库结构 行为(处理)设计:设计应用程序、事务处理等 结构和行为分离的设计 传统的软件工程忽视对应用中数据语义的分析和抽象,只要有可能就尽量推迟数据结构设计的决策早期的数据库设计致力于数据模型和建模方法研究,忽视了对行为的设计 如图:三、数据库设计方法简述 手工试凑法 设计质量与设计人员的经验和水平有直接关系 缺乏科学理论和工程方法的支持,工程的质量难以保证 数据库运行一段时间后常常又不同程度地发现各种问题,增加了维护代价 规范设计法 手工设计方 基本思想 过程迭代和逐步求精 规范设计法(续) 典型方法: (1)新奥尔良(New Orleans)方法:将数据库设计分为四个阶段 S.B.Yao方法:将数据库设计分为五个步骤 I.R.Palmer方法:把数据库设计当成一步接一步的过程 (2)计算机辅助设计 ORACLE Designer 2000 SYBASE PowerDesigner四、数据库设计的基本步骤 数据库设计的过程(六个阶段) 1.需求分析阶段 准确了解与分析用户需求(包括数据与处理) 是整个设计过程的基础,是最困难、最耗费时间的一步 2.概念结构设计阶段 是整个数据库设计的关键 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型 3.逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型 对其进行优化 4.数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法) 5.数据库实施阶段 运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果 建立数据库,编制与调试应用程序,组织数据入库,并进行试运行 6.数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。 在数据库系统运行过程中必须不断地对其进行评价、调整与修改 设计特点: 在设计过程中把数据库的设计和对数据库中数据处理的设计紧密结合起来将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计 设计过程各个阶段的设计描述: 如图:五、数据库各级模式的形成过程 1.需求分析阶段:综合各个用户的应用需求 2.概念设计阶段:形成独立于机器特点,独立于各个DBMS产品的概念模式(E-R图) 3.逻辑设计阶段:首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式 4.物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式 六、数据库设计技巧 1. 设计数据库之前(需求分析阶段) 1) 理解客户需求,询问用户如何看待未来需求变化。让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。 2) 了解企业业务可以在以后的开发阶段节约大量的时间。 3) 重视输入输出。 在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。 举例:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。 4) 创建数据字典和ER 图表 ER 图表和数据字典可以让任何了解数据库的人都明确如何从数据库中获得数据。ER图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对SQL 表达式的文档化来说这是完全必要的。 5) 定义标准的对象命名规范 数据库各种对象的命名必须规范。 2. 表和字段的设计(数据库逻辑设计) 表设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3NF 标准的数据库的表设计原则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。 举例:某个存放客户及其有关定单的3NF 数据库就可能有两个表:Customer 和Order。Order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer 表里包含该客户信息的那一行。 事实上,为了效率的缘故,对表不进行标准化有时也是必要的。 2) 数据驱动 采用数据驱动而非硬编码的方式,许多策略变更和维护都会方便得多,大大增强系统的灵活性和扩展性。 举例,假如用户界面要访问外部数据源(文件、XML 文档、其他数据库等),不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。 3) 考虑各种变化 在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。 举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。字段设计原则 4) 每个表中都应该添加的3 个有用的字段dRecordCreationDate,在VB 下默认是Now(),而在SQL Server • 下默认为GETDATE()sRecordCreator,在SQL Server 下默认为NOT NULL DEFAULT • USERnRecordVersion,记录的版本标记;有助于准确说明记录中出现null 数据或者丢失数据的原因 • 5) 对地址和电话采用多个字段 描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。 6) 使用角色实体定义属于某类别的列 在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。 举例:用PERSON 实体和PERSON_TYPE 实体来描述人员。比方说,当John Smith, Engineer 提升为John Smith, Director 乃至最后爬到John Smith, CIO 的高位,而所有你要做的不过是改变两个表PERSON 和PERSON_TYPE 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的PERSON_TYPE 表就包含了所有PERSON 的可能类型,比如Associate、Engineer、Director、CIO 或者CEO 等。还有个替代办法就是改变PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。 7) 选择数字类型和文本类型尽量充足 在SQL 中使用smallint 和tinyint 类型要特别小心。比如,假如想看看月销售总额,总额字段类型是smallint,那么,如果总额超过了$32,767 就不能进行计算操作了。 而ID 类型的文本字段,比如客户ID 或定单号等等都应该设置得比一般想象更大。假设客户ID 为10 位数长。那你应该把数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。 8) 增加删除标记字段 在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。 3. 选择键和索引(数据库逻辑设计) 键选择原则: 1) 键设计4 原则为关联字段创建外键。 •所有的键都必须唯一。 •避免使用复合键。 •外键总是关联唯一的键字段。 • 2) 使用系统生成的主键 设计数据库的时候采用系统生成的键作为主键,那么实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点:当拥有一致的键结构时,找到逻辑缺陷很容易。 3) 不要用用户的键(不让主键具有可更新性) 在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。 4) 可选键有时可做主键 把可选键进一步用做主键,可以拥有建立强大索引的能力。索引使用原则: 索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。 1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引。考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。 2) 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。 3) 不要索引memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。 4) 不要索引常用的小型表 不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。 4. 数据完整性设计(数据库逻辑设计) 1) 完整性实现机制: 实体完整性:主键 参照完整性: 父表中删除数据:级联删除;受限删除;置空值 父表中插入数据:受限插入;递归插入 父表中更新数据:级联更新;受限更新;置空值 DBMS对参照完整性可以有两种方法实现:外键实现机制(约束规则)和触发器实现机制 用户定义完整性: NOT NULL;CHECK;触发器 2) 用约束而非商务规则强制数据完整性 采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。 3) 强制指示完整性 在有害数据进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。 4) 使用查找控制数据完整性 控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。 5) 采用视图 为了在数据库和应用程序代码之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。 5. 其他设计技巧 1) 避免使用触发器 触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。 2) 使用常用英语(或者其他任何语言)而不要使用编码 在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码,可以在编码旁附上用户知道的英语。 3) 保存常用信息 让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。 4) 包含版本机制 在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。 5) 编制文档 对所有的快捷方式、命名规范、限制和函数都要编制文档。 采用给表、列、触发器等加注释的数据库工具。对开发、支持和跟踪修改非常有用。 对数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。 6) 测试、测试、反复测试 建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。 7) 检查设计 在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。

SQL数据库设计规范及如何设置外键

20个数据库设计最佳实践: 使用明确、统一的标明和列名,例如 School, SchoolCourse, CourceID。 数据表名使用单数而不是复数,例如 StudentCourse,而不是StudentCourses。 数据表名不要使用空格。 数据表名不要使用不必要的前缀或者后缀,例如使用School,而不是TblSchool,或者SchoolTable等等。 数据库中的密码要加密,到应用中再解密。 使用整数作为ID字段,也许现在没有这个必要,但是将来需要,例如关联表,索引等等。 使用整数字段做索引,否则会带来很大的性能问题 。 使用bit 作为布尔字段,使用整数或者varcha是浪费。同时,这类字段应该以“Is”开头。 要经过认证才能访问数据库,不要给每一个用户管理员权限。 尽量避免使用“select *”,而使用“select [required_column_list]”以获得更好的性能。 假如程序代码比较复杂,使用ORM框架,例如hibernate,iBatis。ORM框架的性能问题可以通过详细的配置去解决。 分割不常使用的数据表到不同的物理存储以获得更好的性能。 对于关键数据库,使用安全备份系统,例如集群,同步等等。 使用外键,非空等限制来保证数据的完整性,不要把所有的东西都扔给程序。 缺乏数据库文档是致命的。你应该为你的数据库设计写文档,包括触发器、存储过程和其他脚本。 对于经常使用的查询和大型数据表,要使用索引。数据分析工具可以帮助你决定如何建立索引。 数据库服务器和网页服务器应该放在不同的机器上。这回提高安全性,并减轻CPU压力。 Image和blob字段不应该定义在常用的数据表中,否则会影响性能。 范式(Normalization)要按照要求使用以提高性能。Normalization做的不够会导致数据冗余,而过度Normalization 会导致太多的join和数据表,这两种情况都会影响性能。 多花点时间在数据库设计上,否则你将来会付出加倍的时间来偿还。设置外键:方法一:SQL语句alter table 表名 add constraint 外键名 foreign key(字段名) references 主表名(字段名) on delete cascade方法二:不想写sql 语句也可以直接用图形化操作 选择你要创建外键的表,反键选择修改表,点击

数据库的规范化设计方法~

第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。 例如,如下的数据库表是符合第一范式的: 字段1 字段2 字段3 字段4 而这样的数据库表是不符合第一范式的: 字段1 字段2 字段3 字段4 字段3.1 字段3.2 很显然,在当前的任何关系数据库管理系统(DBMS)中,傻瓜也不可能做出不符合第一范式的数据库,因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的。 第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况),也即所有非关键字段都完全依赖于任意一组候选关键字。 假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系: (学号, 课程名称) → (姓名, 年龄, 成绩, 学分) 这个数据库表不满足第二范式,因为存在如下决定关系: (课程名称) → (学分) (学号) → (姓名, 年龄) 即存在组合关键字中的字段决定非关键字的情况。 由于不符合2NF,这个选课关系表会存在如下问题: (1) 数据冗余: 同一门课程由n个学生选修,“学分“就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。 (2) 更新异常: 若调整了某门课程的学分,数据表中所有行的“学分“值都要更新,否则会出现同一门课程学分不同的情况。 (3) 插入异常: 假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有“学号“关键字,课程名称和学分也无法记录入数据库。 (4) 删除异常: 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。 把选课关系表SelectCourse改为如下三个表: 学生:Student(学号, 姓名, 年龄); 课程:Course(课程名称, 学分); 选课关系:SelectCourse(学号, 课程名称, 成绩)。 这样的数据库表是符合第二范式的, 消除了数据冗余、更新异常、插入异常和删除异常。 另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。 第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如果存在“A → B → C“的决定关系,则C传递函数依赖于A。因此,满足第三范式的数据库表应该不存在如下依赖关系: 关键字段 → 非关键字段x → 非关键字段y 假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字“学号“,因为存在如下决定关系: (学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话) 这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系: (学号) → (所在学院) → (学院地点, 学院电话) 即存在非关键字段“学院地点“、“学院电话“对关键字段“学号“的传递函数依赖。 它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。 把学生关系表分为如下两个表: 学生:(学号, 姓名, 年龄, 所在学院); 学院:(学院, 地点, 电话)。 这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。 鲍依斯-科得范式(BCNF):在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。 假设仓库管理关系表为StorehouseManage(仓库ID, 存储物品ID, 管理员ID, 数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系: (仓库ID, 存储物品ID) →(管理员ID, 数量) (管理员ID, 存储物品ID) → (仓库ID, 数量) 所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是StorehouseManage的候选关键字,表中的唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系: (仓库ID) → (管理员ID) (管理员ID) → (仓库ID) 即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。它会出现如下异常情况: (1) 删除异常: 当仓库被清空后,所有“存储物品ID“和“数量“信息被删除的同时,“仓库ID“和“管理员ID“信息也被删除了。 (2) 插入异常: 当仓库没有存储任何物品时,无法给仓库分配管理员。 (3) 更新异常: 如果仓库换了管理员,则表中所有行的管理员ID都要修改。 把仓库管理关系表分解为二个关系表: 仓库管理:StorehouseManage(仓库ID, 管理员ID); 仓库:Storehouse(仓库ID, 存储物品ID, 数量)。 这样的数据库表是符合BCNF范式的,消除了删除异常、插入异常和更新异常。 范式应用 我们来逐步搞定一个论坛的数据库,有如下信息: (1) 用户:用户名,email,主页,电话,联系地址 (2) 帖子:发帖标题,发帖内容,回复标题,回复内容 第一次我们将数据库设计为仅仅存在表: 用户名 email 主页 电话 联系地址 发帖标题 发帖内容 回复标题 回复内容 这个数据库表符合第一范式,但是没有任何一组候选关键字能决定数据库表的整行,唯一的关键字段用户名也不能完全决定整个元组。我们需要增加“发帖ID“、“回复ID“字段,即将表修改为: 用户名 email 主页 电话 联系地址 发帖ID 发帖标题 发帖内容 回复ID 回复标题 回复内容 这样数据表中的关键字(用户名,发帖ID,回复ID)能决定整行: (用户名,发帖ID,回复ID) → (email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容)

求数据库字段类型设计规范

规则:用尽量少的存储空间来存 数一个字段的数据.比如能用int的就不用char或者varchar能用tinyint的就不用int能用 varchar(20)的就不用varchar(255)时间戳字段尽量用int型,如 created:表示从 ’1970-01-01?08:00:00’开始的int秒数,采用英文单词的过去式;gmtCreated:表示datetime类型的时间,即形如 ’1980-01-01?00:00:00’的时间串,Java中对应的类型为Timestamp日期:用date 时间:用time数字格式的用:int、tinyint、mediumint、smallint、bigint根据实际情况选择 字符串:用char、varcahr;文本:用text金额:用float

数据库规范设计

这个书上应该都有的啊1.需求分析阶段 准确了解与分析用户需求(包括数据与处理) 是整个设计过程的基础,是最困难、最耗费时间的一步2.概念结构设计阶段 是整个数据库设计的关键 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型3.逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型 对其进行优化4.数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)5.数据库实施阶段 运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果 建立数据库,编制与调试应用程序,组织数据入库,并进行试运行6.数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。

数据库完整性的设计原则

在实施数据库完整性设计的时候,有一些基本的原则需要把握:1.根据数据库完整性约束的类型确定其实现的系统层次和方式,并提前考虑对系统性能的影响。一般情况下,静态约束应尽量包含在数据库模式中,而动态约束由应用程序实现。2.实体完整性约束、参照完整性约束是关系数据库最重要的完整性约束,在不影响系统关键性能的前提下需尽量应用。用一定的时间和空间来换取系统的易用性是值得的。3.另一方面,触发器的多级触发不好控制,容易发生错误,非用不可时,最好使用Before型语句级触发器。4.在需求分析阶段就必须制定完整性约束的命名规范,尽量使用有意义的英文单词、缩写词、表名、列名及下划线等组合,使其易于识别和记忆,如:CKC_EMP_REAL_INCOME_EMPLOYEE、PK_EMPLOYEE、CKT_EMPLOYEE。如果使用CASE工具,一般有缺省的规则,可在此基础上修改使用。5.要根据业务规则对数据库完整性进行细致的测试,以尽早排除隐含的完整性约束间的冲突和对性能的影响。6.要有专职的数据库设计小组,自始至终负责数据库的分析、设计、测试、实施及早期维护。数据库设计人员不仅负责基于DBMS的数据库完整性约束的设计实现,还要负责对应用软件实现的数据库完整性约束进行审核。7.应采用合适的CASE工具来降低数据库设计各阶段的工作量。好的CASE工具能够支持整个数据库的生命周期,这将使数据库设计人员的工作效率得到很大提高,同时也容易与用户沟通。

数据库规范设计方法将数据库设计划分的六个阶段是什么

这个书上应该都有的啊1.需求分析阶段 准确了解与分析用户需求(包括数据与处理) 是整个设计过程的基础,是最困难、最耗费时间的一步2.概念结构设计阶段 是整个数据库设计的关键 通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型3.逻辑结构设计阶段 将概念结构转换为某个DBMS所支持的数据模型 对其进行优化4.数据库物理设计阶段 为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)5.数据库实施阶段 运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果 建立数据库,编制与调试应用程序,组织数据入库,并进行试运行6.数据库运行和维护阶段 数据库应用系统经过试运行后即可投入正式运行。


声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢。

上一篇: explore是什么意思(explorer是什么意思)

下一篇: 梦见和死人在一起,梦见亲人和死人在一起(解梦心理学:梦见死人是凶兆吗)



猜你感兴趣

推荐阅读

网站内容来自网络,如有侵权请联系我们,立即删除! | 软文发布 | 粤ICP备2021106084号