2023年7月27日发(作者:)
数据库设计系列:数据库设计5步骤数据库设计5步骤1.确定entities及relationshipsa)设计宏观⾏为。你⽤此数据库来做什么?⽐如,希望管理雇员的信息。b)确定entities。对于⼀系列的⾏为,确定所管理信息所涉及到的主题范围。这将变成table。⽐如,雇⽤员⼯,指定具体部门,确定技能等级。c)确定relationships。看着⾏为,确定tables之间有何种关系。⽐如,在部门与雇员之间存在⼀种关系。给这种关系命名。d)细化⾏为。你从宏观⾏为开始,现在仔细检查这些⾏为,看有哪些⾏为能转为微观⾏为。⽐如,管理雇员的信息可细化为:● 增加新员⼯● 修改存在员⼯信息● 删除调⾛的员⼯e)确定业务规则。看着你的业务规则,确定你要采取哪种。⽐如,可能有这样⼀种规则,⼀个部门有且只能有⼀个部门领导。这些规则将被设计到数据库的结构中。范例:ACME是⼀个⼩公司,在5个地⽅都设有办事处。当前,有75名员⼯。公司准备快速扩⼤规模,划分了9个部门,每个部门都有其领导。为有助于寻求新的员⼯,⼈事部门规划了68种技能,为将来⼈事管理作好准备。员⼯被招进时,每⼀种技能的专业等级都被确定。定义宏观⾏为⼀些ACME公司的宏观⾏为包括:● 招聘员⼯● 解雇员⼯● 管理员⼯个⼈信息● 管理公司所需的技能信息● 管理哪位员⼯有哪些技能● 管理部门信息● 管理办事处信息确定entities及relationships我们可以确定要存放信息的主题领域(表)及其关系,并创建⼀个基于宏观⾏为及描述的图表。我们⽤⽅框来代表table,⽤菱形代表relationship。我们可以确定哪些relationship是⼀对多,⼀对⼀,及多对多。这是⼀个E-R草图,以后会细化。细化宏观⾏为以下微观⾏为基于上⾯宏观⾏为⽽形成:● 增加或删除⼀个员⼯● 增加或删除⼀个办事处● 列出⼀个部门中的所有员⼯● 增加⼀项技能● 增加⼀个员⼯的⼀项技能● 确定⼀个员⼯的技能● 确定⼀个员⼯每项技能的等级● 确定所有拥有相同等级的某项技能的员⼯● 修改员⼯的技能等级这些微观⾏为可⽤来确定需要哪些table或relationship。确定业务规则业务规则常⽤于确定⼀对多,⼀对⼀,及多对多关系。相关的业务规则可能有:● 现在有5个办事处;最多允许扩展到10个。● 员⼯可以改变部门或办事处● 每个部门有⼀个部门领导● 每个办事处⾄多有3个电话号码● 每个电话号码有⼀个或多个扩展● 员⼯被招进时,每⼀种技能的专业等级都被确定。● 每位员⼯拥有3到20个技能● 某位员⼯可能被安排在⼀个办事处,也可能不安排办事处。2.确定所需数据要确定所需数据:1. 确定⽀持数据2. 列出所要跟踪的所有数据。描述table(主题)的数据回答这些问题:谁,什么,哪⾥,何时,以及为什么3. 为每个table建⽴数据4. 列出每个table⽬前看起来合适的可⽤数据5. 为每个relationship设置数据6. 如果有,为每个relationship列出适⽤的数据确定⽀持数据你所确定的⽀持数据将会成为table中的字段名。⽐如,下列数据将适⽤于表Employee,表Skill,表Expert In。如果将这些数据画成图表,就像:需要注意:● 在确定⽀持数据时,请⼀定要参考你之前所确定的宏观⾏为,以清楚如何利⽤这些数据。● ⽐如,如果你知道你需要所有员⼯的按姓⽒排序的列表,确保你将⽀持数据分解为名字与姓⽒,这⽐简单地提供⼀个名字会更好。● 你所选择的名称最好保持⼀致性。这将更易于维护数据库,也更易于阅读所输出的报表。● ⽐如,如果你在某些地⽅⽤了⼀个缩写名称Emp_status,你就不应该在另外⼀个地⽅使⽤全名(Empolyee_ID)。相反,这些名称应当是Emp_status及Emp_id。● 数据是否与正确的table相对应⽆关紧要,你可以根据⾃⼰的喜好来定。在下节中,你会通过测试对此作出判断。3.标准化数据标准化是你⽤以消除数据冗余及确保数据与正确的table或relationship相关联的⼀系列测试。共有5个测试。本节中,我们将讨论经常使⽤的3个。关于标准化测试的更多信息,请参考有关数据库设计的书籍。标准化格式标准化格式是标准化数据的常⽤测试⽅式。你的数据通过第⼀遍测试后,就被认为是达到第⼀标准化格式;通过第⼆遍测试,达到第⼆标准化格式;通过第三遍测试,达到第三标准化格式。如何标准格式:1. 列出数据2. 为每个表确定⾄少⼀个键。每个表必须有⼀个主键。3. 确定relationships的键。relationships的键是连接两个表的键。4. 检查⽀持数据列表中的计算数据。计算数据通常不保存在数据库中。5. 将数据放在第⼀遍的标准化格式中:6. 从tables及relationships除去重复的数据。7. 以你所除去数据创建⼀个或更多的tables及relationships。8. 将数据放在第⼆遍的标准化格式中:9. ⽤多于⼀个以上的键确定tables及relationships。10. 除去只依赖于键⼀部分的数据。11. 以你所除去数据创建⼀个或更多的tables及relationships。12. 将数据放在第三遍的标准化格式中:13. 除去那些依赖于tables或relationships中其他数据,并且不是键的数据。14. 以你所除去数据创建⼀个或更多的tables及relationships。数据与键在你开始标准化(测试数据)前,简单地列出数据,并为每张表确定⼀个唯⼀的主键。这个键可以由⼀个字段或⼏个字段(连锁键)组成。主键是⼀张表中唯⼀区分各⾏的⼀组字段。Employee表的主键是Employee ID字段。Works In relationship中的主键包括Office Code及Employee ID字段。给数据库中每⼀relationship给出⼀个键,从其所连接的每⼀个table中抽取其键产⽣。将数据放在第⼀遍的标准化格式中● 除去重复的组● 要测试第⼀遍标准化格式,除去重复的组,并将它们放进他们各⾃的⼀张表中。● 在下⾯的例⼦中,Phone Number可以重复。(⼀个⼯作⼈员可以有多于⼀个的电话号码。)将重复的组除去,创建⼀个名为Telephone的新表。在Telephone与Office创建⼀个名为Associated With的relationship。将数据放在第⼆遍的标准化格式中● 除去那些不依赖于整个键的数据。● 只看那些有⼀个以上键的tables及relationships。要测试第⼆遍标准化格式,除去那些不依赖于整个键的任何数据(组成键的所有字段)。● 在此例中,原Employee表有⼀个由两个字段组成的键。⼀些数据不依赖于整个键;例如,department name只依赖于其中⼀个键(Department ID)。因此,Department ID,其他Employee数据并不依赖于它,应移⾄⼀个名为Department的新表中,并为Employee及Department建⽴⼀个名为Assigned To的relationship。将数据放在第三遍的标准化格式中● 除去那些不直接依赖于键的数据。● 要测试第三遍标准化格式,除去那些不是直接依赖于键,⽽是依赖于其他数据的数据。● 在此例中,原Employee表有依赖于其键(Employee ID)的数据。然⽽,office location及office phone依赖于其他字段,即Office Code。它们不直接依赖于Employee ID键。将这组数据,包括Office Code,移⾄⼀个名为Office的新表中,并为Employee及Office建⽴⼀个名为Works In的relationship。4.考量关系当你完成标准化进程后,你的设计已经差不多完成了。你所需要做的,就是考量关系。考量带有数据的关系你的⼀些relationship可能集含有数据。这经常发⽣在多对多的关系中。遇到这种情况,将relationship转化为⼀个table。relationship的键依旧成为table中的键。考量没有数据的关系要实现没有数据的关系,你需要定义外部键。外部键是含有另外⼀个表中主键的⼀个或多个字段。外部键使你能同时连接多表数据。有⼀些基本原则能帮助你决定将这些键放在哪⾥:⼀对多在⼀对多关系中,“⼀”中的主键放在“多”中。此例中,外部键放在Employee表中。⼀对⼀在⼀对⼀关系中,外部键可以放进任⼀表中。如果必须要放在某⼀边,⽽不能放在另⼀边,应该放在必须的⼀边。此例中,外部键(Head ID)在Department表中,因为这是必需的。多对多在多对多关系中,⽤两个外部键来创建⼀个新表。已存的旧表通过这个新表来发⽣联系。5.检验设计在你完成设计之前,你需要确保它满⾜你的需要。检查你在⼀开始时所定义的⾏为,确认你可以获取⾏为所需要的所有数据:● 你能找到⼀个路径来等到你所需要的所有信息吗?● 设计是否满⾜了你的需要?● 所有需要的数据都可⽤吗?如果你对以上的问题都回答是,你已经差不多完成设计了。最终设计最终设计看起来就像这样:设计数据库的表属性数据库设计需要确定有什么表,每张表有什么字段。此节讨论如何指定各字段的属性。对于每⼀字段,你必须决定字段名,数据类型及⼤⼩,是否允许NULL值,以及你是否希望数据库限制字段中所允许的值。选择字段名字段名可以是字母、数字或符号的任意组合。然⽽,如果字段名包括了字母、数字或下划线、或并不以字母打头,或者它是个关键字(详见关键字表),那么当使⽤字段名称时,必须⽤双引号括起来。为字段选择数据类型SQL Anywhere⽀持的数据类型包括: 整数(int, integer, smallint) ⼩数(decimal, numeric) 浮点数(float, double) 字符型(char, varchar, long varchar) ⼆进制数据类型(binary, long binary) ⽇期/时间类型(date, time, timestamp) ⽤户⾃定义类型关于数据类型的内容,请参见“SQL Anywhere数据类型”⼀节。字段的数据类型影响字段的最⼤尺⼨。例如,如果你指定SMALLINT,此字段可以容纳32,767的整数。INTEGER可以容纳2,147,483,647的整数。对CHAR来讲,字段的最⼤值必须指定。长⼆进制的数据类型可⽤来在数据库中保存例如图像(如位图)或者⽂字编辑⽂档。这些类型的信息通常被称为⼆进制⼤型对象,或者BLOBS。关于每⼀数据类型的完整描述,见“SQL Anywhere数据类型”。NULL与NOT NULL如果⼀个字段值是必填的,你就将此字段定义为NOT NULL。否则,字段值可以为NULL值,即可以有空值。SQL中的默认值是允许空值;你应该显⽰地将字段定义为NOT NULL,除⾮你有好理由将其设为允许空值。关于NULL值的完整描述,请见“NULL value”。有关其对⽐⽤法,见“Search conditions”。选择约束尽管字段的数据类型限制了能存在字段中的数据(例如,只能存数字或⽇期),你或许希望更进⼀步来约束其允许值。你可以通过指定⼀个“CHECK”约束来限制任意字段的值。你可以使⽤能在WHERE⼦句中出现的任何有效条件来约束被允许的值,尽管⼤多数CHECK约束使⽤BETWEEN或IN条件。更多信息有关有效条件的更多信息,见“Search conditions”。有关如何为表及字段指定约束,见“Ensuring Data Integrity”。例⼦例⼦数据库中有⼀个名为department的表,字段是dept_id, dept_name, dept_head_id。其定义如下:注意每⼀字段都被指定为“not null”。这种情况下,表中每⼀记录的所有字段的数据都必填。选择主键及外部键主键是唯⼀识别表中每⼀项记录的字段。如何你的表已经正确标准化,主键应当成为数据库设计的⼀部分。外部键是包含另⼀表中主键值的⼀个或⼀组字段。外部键关系在数据库中建⽴了⼀对⼀及⼀对多关系。如果你的设计已经正确标准化,外部键应当成为数据库设计的⼀部分。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690430102a348788.html
评论列表(0条)