数据库设计基础

数据库设计基础

注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容。本页面是自动翻译的,可能包含语法错误或不准确之处。我们的目的是使此内容能对你有所帮助。可以在本页面底部告诉我们此信息是否对你有帮助吗?请在此处查看本文的英文版本以便参考。

正确设计的数据库为您提供了访问最新、 准确的信息。正确设计至关重要实现您在使用数据库中的目标,因为些时间需要了解良好设计的原则有意义。最后,您处于更容易结尾符合自己需求的数据库,并且可以轻松地适应更改。

本文提供了规划桌面数据库的准则。您将学习如何确定您需要哪些信息、 如何将该信息划分为相应的表和列,以及这些表如何相互。创建您的第一个桌面数据库之前,应阅读本文。

重要: Access提供了使您可以创建 web 数据库应用程序的设计体验。许多设计注意事项是不同的 web 设计时。本文不讨论 Web 数据库应用程序设计。有关详细信息,请参阅生成可在 Web 上共享数据库一文。

本文内容

若要了解的一些数据库术语

什么是优秀数据库设计?

设计过程

确定数据库的用途

查找和组织所需的信息

划分到表中的信息

转换成列的信息项

指定为主键

创建表关系

优化设计

应用规范化规则


若要了解的一些数据库术语

Access组织您的信息为: 的行和列来表达怀旧会计的拨号盘或电子表格的列表。一个简单的数据库,您可能只有一个表。对于大多数数据库,您将需要多个。例如,您可能会有一个表来存储有关客户的信息有关产品、 另一个表存储有关订单、 信息和另一个表的信息。

描述数据表中三个表的图像

每个行更准确地称为记录,而每个列中,一个字段。记录是有意义且保持一致的方式合并内容的信息。字段是单个项目的信息-在每个记录显示项目类型。在产品表中,例如,每个行或记录将容纳一个产品的信息。每个列或字段包含某些类型的该产品,例如名称或价格信息。

返回页首

什么是优秀数据库设计?

某些原则指导数据库设计过程。第一项原则的是重复 (也称为冗余数据) 的信息不正确,因为它浪费空间,并增加错误和不一致的可能性。第二个原则是正确性和信息的完整性很重要。如果您的数据库包含错误的信息,从数据库提取信息任何报表也将包含错误的信息。因此,基于这些报表的决策进行然后将提供错误信息。

良好的数据库设计,因此,是一项的:

  • 将您的信息为基于主题的表,以减少冗余的数据。

  • Access 提供所需联接表中的信息在一起根据需要的信息。

  • 可帮助支持和确保准确性和信息的完整性。

  • 适合于数据处理和报告需求。

返回页首

设计过程

设计过程包括以下步骤:

  • 确定数据库的用途   

    这可以帮助您准备的其余步骤。

  • 查找和组织所需的信息   

    收集的所有信息,您可能希望在数据库中,例如产品名称和订单编号记录的类型。

  • 划分到表中的信息   

    将信息项划分为主要实体或主题,如产品或订单。每个主题将一个表。

  • 关闭信息项目导入的列   

    决定要在每个表中存储的信息。每个项目成为字段,并显示为表中的列。例如,员工表可能包含如姓氏和聘用日期的字段。

  • 指定为主键   

    选择每个表的主键。主键是用于唯一标识每一行的列。示例可能是产品 ID 或订单 id。

  • 设置表关系   

    查看每个表并决定一个表中的数据与其他表中的数据。向表添加字段,或创建新的表,用于阐明的关系,根据需要。

  • 优化您的设计   

    分析设计中的错误。创建表并添加一些示例数据的记录。请参阅是否您可以获得所需从表的结果。进行所需的设计,调整。

  • 应用规范化规则   

    应用数据规范化规则,以查看表的正确结构。根据需要进行调整表格。

返回页首

确定数据库的用途

它是一个好主意,要在纸张上写下的数据库的用途,其目的、 希望如何使用它,和谁将使用它。家庭办公为小数据库,例如,您可能会编写一些简单内容等"客户数据库保留用于生成邮件和报表的客户信息列表"。如果数据库是更复杂或许多人使用,多次出现在公司的设置,用途轻松可能是一个段落或多项,并应包含何时及如何每个人都将使用数据库。概念是可以在整个设计过程中引用的良好的任务语句。遇到此类语句让您可以专注于目标时做出决策。

返回页首

查找和组织所需的信息

若要查找和组织所需的信息,开始您现有的信息。例如,您可能会在纸质表单中的文件柜分类帐或保留客户信息记录采购订单。收集这些文档,并列出每种类型的信息显示 (例如,在窗体填写每个框)。如果您没有任何现有窗体,假设相反,您需要设计一个表单来记录客户的信息。在窗体上会使哪些信息?您希望创建哪些填充框?确定并列出每个项。例如,假设您当前保留索引卡上的客户列表。检查这些卡片可能显示每张卡片包含客户姓名、 地址、 城市、 状态、 邮政编码和电话号码。每个项表示表中的潜在列。

在准备此列表时,不必担心它达到完美的效果。相反,列出想到的每个项目。如果其他人将使用该数据库,让他们的观点太。您可以在以后微调列表。

接下来,考虑在报表或您可能希望从数据库生成的邮件类型。例如,您可能希望产品销售报表以显示销售地区或显示产品库存级别的库存汇总报表。您可能还想要生成套用信函发送给客户宣布销售事件或提供优惠的。设计中的报表中主意,并假设其外观。您将在报表上放置哪些信息?列出每个项目。执行相同的套用信函和预计要创建的任何其他报表。

正在设想产品库存报表的人员

考虑报告和邮件,您可能希望创建可帮助你确定需要在数据库中的项目。例如,假设您提供的客户机会订阅 (或外出) 中选择定期电子邮件更新,并且您想要打印的那些参加的列表。若要录制的信息,您添加到客户表"发送电子邮件"的列。对于每个客户,您可以将字段设置为是或否。

若要向客户发送电子邮件的要求建议要录制的另一个项目。一旦您知道客户想要接收电子邮件,您还需要了解向其发送给他们的电子邮件地址。因此,您需要为每个客户记录电子邮件地址。

很好的做法构造的每个报表原型或输出列表并考虑哪些项目将需要生成报表。例如,当您检查套用信函,一些可能会想到。如果您想要包括正确称呼 — 例如,"先生"、"小姐"或"女士"开始的字符串的问候语,则必须创建称呼项目。此外,您可能会通常开始一个字母"亲爱先生 Smith",而不是"尊敬。先生表示 Smith"。这表明您通常想要存储分开的名的姓氏。

关键要记住的一点是您应为其最小的有用部分断开每条信息。对于一个名称,以让姓氏易于使用,您将名称分为两个部分-名字和姓氏。若要按姓氏排序报表,例如,很有帮助分别存储的客户的姓氏。一般情况下,如果您想要进行排序、 搜索、 计算或报表基于的信息项,应将该项目放在自己的字段。

思考您可能希望数据库回答问题。例如,您特色产品销售未关闭上个月?最佳客户居住在什么位置?您最畅销产品的供应商是谁?预测这些问题可以帮助您零中在其他项目进行录制。

收集此信息后,您准备好执行后续步骤。

返回页首

划分到表中的信息

若要将划分到表中的信息,请选择主要实体或主题。例如,查找和组织产品销售数据库的信息后, 的初步列表可能如下所示:

划分为若干主题的手写信息项

此处显示的主要实体是产品、 供应商、 客户和订单。因此,有意义开头以下四个表: 有关产品事实为一行,一个供应商有关事实,一个有关客户,事实,一个用于订单有关事实。虽然此未完成列表,很好的起点。您可以继续优化此列表,直到得到比较合适的设计。

首先审阅的项目的初步列表时,您可以尝试将它们放在一个表,而不是在上图中显示的四个所有。您将在此处了解为什么,它是个好主意。考虑一下,此处显示的表格:

显示同时包含产品和供应商的表的图像

在此例中,每行包含有关产品和其供应商的信息。您可以有许多相同的供应商的产品,因为供应商的名称和地址信息会有要重复次数。这浪费磁盘空间。录制的供应商信息一次只能在单独的供应商表,然后将该表格链接到产品表中,并更好的解决方案。

当您需要修改有关供应商的信息时,此设计第二个问题附带。例如,假设您需要更改供应商的地址。它将出现在多个位置,因为可能会意外更改在一个位置的地址,但忘记在其他更改。录制中只有一个位置的供应商的地址解决问题。

设计您的数据库时,总是尝试记录每个事实只需一次。如果您发现自己重复相同的信息在多个位置,例如特定供应商,地址将该信息放入一个单独的表中。

最后,假定 Coho winery 提供一个产品,您想要删除该产品,但保留供应商的名称和地址信息。您如何将删除产品记录而不也会丢失的供应商信息?你不能。每条记录包含有关产品,事实以及有关供应商事实,因为您无法删除而不删除另一个。将下列事实分开,必须将一个表拆分为两个: 一个产品信息和供应商信息的另一个表。删除产品记录应删除仅事实有关产品,不有关供应商事实。

一旦您选择了由一个表中的主题,该表格中的列应仅存储有关事实主题。例如,产品表应仅存储有关事实产品。因为供应商地址事实有关供应商,并且不有关产品的事实,它属于供应商表。

返回页首

转换成列的信息项

要确定表中的列,请确定您需要跟踪有关主题的哪些信息记录表中。例如,客户表的名称,地址,市-省-邮编,发送电子邮件、 称呼和电子邮件地址构成良好起始列的列表。在表中的每个记录包含相同的设置的列,以便您可以存储姓名、 地址市-省-邮编,发送电子邮件、 称呼和电子邮件地址的每条记录的信息。例如,地址列中包含客户地址。每条记录包含一个客户,有关的数据,地址字段包含该客户的地址。

一旦确定了每个表的列的初始设置后,您可以进一步优化列。例如,有意义为两个单独的列中存储的客户名称: 名字和姓氏,以便您可以进行排序,搜索和索引上仅在这些列。同样,地址实际上包含五个单独的组件、 地址、 城市、 状态、 邮政编码和国家/地区的也可以将其存储在单独的列。如果您想要执行搜索、 筛选或排序操作的状态,例如,您需要一个单独的列中存储的状态信息。

您还应考虑是否数据库将保留也是唯一的或国际,国内的信息。例如,如果您打算存储国际地址,最好是具有区域列,而不是状态,因为此类列可以容纳国内状态和其他国家/地区的区域。同样,邮政编码更有意义比邮政编码如果您打算存储国际地址。

以下列表显示了用于确定列的一些技巧。

  • 不包含计算的数据   

    在大多数情况下,您不应存储表中的计算的结果。相反,您可以执行计算,当您想要查看结果的访问。例如,假设存在数据库中的产品的每个类别的顺序显示的单位的小计订购产品报告。但是,没有任何表中的订购量分类汇总列。相反,产品表包含订购量列在每个产品的顺序上存储的单位。使用该数据,Access 将计算分类汇总的每次打印报表。分类汇总本身不应存储在表中。

  • 将信息存储在其最小的逻辑部分   

    您可能会有一个字段的完整名称,或产品名称和产品说明。如果组合多个类型的字段中的信息,很难检索单个事实更高版本。尝试将信息导入到逻辑部分; 细分例如,创建单独的字段,为第一个和最后一个名称,或产品名称、 类别和说明。

显示设计过程中的信息项的图像

后进行优化每个表中的数据列,您就可以选择每个表的主键。

返回页首

指定为主键

每个表应包含列或一组列的唯一标识存储在表中每一行。这通常是唯一标识号,如员工 ID 号或序列号。数据库术语中,此信息称为表的主键。Access 使用主键字段快速将多个表中的数据相关联,并将数据整合在一起,为您。

如果您已拥有表中,如唯一标识在目录中,每个产品的产品编号的唯一标识符为表的主键,您可以使用该标识符,但只有此列中的值将始终是不同的每条记录。主键中,不能包含重复值。例如,不要使用人员的姓名为主键,因为不是唯一的名称。在同一个表中,您可以轻松地拥有具有相同名称的两个用户。

主键必须始终具有一个值。如果列的值可能会变得未分配或未知 (缺少值) 的某个时刻,它不能用作主键中的一个组件。

您应始终选择的主键其值不会更改。在数据库中使用多个表,表的主键可以用作其他表中的引用。如果主键发生更改,更改必须也应用任何位置引用该键。使用主键不会改变减少主键可能会与其他表引用该同步的机会。

通常情况下,将任意唯一数字用作主键。例如,您可能会分配每个订单唯一的订单编号。订单号的唯一目的是标识订单。分配后,它永远不会更改。

如果您没有记住列或一组可能会使好的主键的列,请考虑使用具有自动编号数据类型的列。使用自动编号数据类型时,Access 会自动为您分配一个值。这样的标识符不包含事实;它包含任何描述所代表行真实信息。这些标识符非常适合为主键的使用,因为它们不会更改。包含有关行事实主键 — 电话号码或客户名称,例如,是有可能会改变,因为事实信息本身可能会更改。

显示具有主键字段的“产品”表的图像

1.列设置为自动编号数据类型通常使好的主键。两个产品 Id 不是相同的。

在某些情况下,您可能想要使用两个或多个字段的共同提供了一个表的主键。例如,订单明细表中存储订单明细项目将在其主键中使用两个列: 订单 ID 和产品 id。当一个主键使用多个列时,它也称为复合键。

产品销售数据库,您可以创建的每个要用作主键的表的自动编号列: 产品表的产品 Id、 订单 id 的订单表,客户 id 的客户表和供应商表的供应商。

显示设计过程中的信息项的图像


返回页首

创建表关系

既然您已将信息划分到表,您需要一种方法将信息组合在一起再次有意义的方式。例如,以下形式包括多个表中的信息。

“订单”窗体

1. 此窗体中的信息来自“客户”表...

2....。 将出现雇员表...

3....。 将出现订单表...

4....。 将出现产品表...

5....更新合情合理订单明细表。

访问是关系数据库管理系统。在关系数据库中,您划分到单独的基于主题的表,您的信息。然后使用表关系一起根据需要将信息。

返回页首

创建一个对多关系

请考虑以下示例: 产品中的供应商和产品表订单数据库。供应商可以提供任意数量的产品。随之出现的供应商表中表示任何供应商,可能会有许多表示产品表中的产品。供应商表和产品表之间的关系,因此,是一个一对多关系。

一对多的概念

表示一对多关系数据库设计中的,采用关系的"一"方的主键和将其作为其他列或列添加到关系的"多"端上的表格。在此例中,例如,您添加供应商 ID 列供应商表中产品表。Access 可以然后使用供应商 ID 号产品表中找到的每个产品的正确供应商。

在产品表供应商 ID 列被称为外键。外键是另一个表的主键。在产品表供应商 ID 列是外键,因为它也是供应商表中的主键。

显示设计过程中的信息项的图像

您通过建立的主键和外键配对联接相关的表中提供的基础。如果您不能确定哪些表应该共享公共列,确定-一对多关系可确保所涉及的两个表将确实需要一个共享的列。

返回页首

创建多对多关系

请考虑产品表和订单表之间的关系。

单个订单可以包含多个产品。另一方面,单个产品可以出现在多个订单。因此,订单表中的每条记录,可以有许多记录在产品表中。和产品表中的每条记录,可以有许多记录中订单表。此类型的关系被称为多对多关系,因为任何产品,可能有许多订单。然后按任何顺序,对于可能有许多产品。请注意,检查表之间的多对多关系,务必要考虑的关系的两面。

两个表的主题 — 订单和产品 — 具有多对多关系。这会带来问题。若要了解的问题,会发生什么情况假设如果您尝试通过将产品 ID 字段添加到订单表的两个表之间创建关系。若要让每个订单的多个产品,您需要在每个订单订单表中的多条记录。您希望与单个订单的每一行重复订单信息 — 得到可能会导致不准确数据效率低下设计。如果你将在产品表中的订单 ID 字段遇到同样的问题,将产品表中的每个产品中有多个记录。您如何解决此问题?

答案是创建第三个表,通常称为联接表,它将分割到两个-一对多关系的多对多关系。主键每两个表将插入第三个表中。因此,第三个表记录每个事件或实例的关系。

多对多关系

在订单明细表中的每条记录表示已订货物的一个明细项目。订单明细表的主键包含两个字段,订单和产品表的外键。使用单独的订单 ID 字段不起作用为主键此表,因为一份订单可以有多个行项目。订单 ID 重复每个行项目上的顺序,以便字段中不包含唯一值。使用产品 ID 字段中单独不起作用,因为一个产品可能会出现在多个不同的订单。但在一起,两个字段始终生成一个唯一值的每条记录。

在产品销售数据库中,订单表和产品表不相关相互直接。相反,它们是间接通过相关订单明细表。订单和产品之间的多对多关系数据库中使用两个-一对多关系来表示:

  • 订单表和订单明细表有一对多关系。每个订单可以有多个行项目,但每个行项目连接到只有一个订单。

  • 产品表和订单明细表有一对多关系。每个产品可以有多个行项目相关联,但只有一个产品是指每个行项目。

订单明细表中,您可以确定的所有产品在特定的顺序。您还可以确定的所有特定产品订单。

合并订单明细表之后, 的表和字段列表可能如下所示:

显示设计过程中的信息项的图像


返回页首

创建一对一关系

另一种关系是一对一关系。例如,假设您需要录制很少需要一些特殊的补充产品信息或仅适用于几个产品。由于您不需要的信息通常情况下,并且信息存储在产品表将会导致向其中每个产品不适用于的空白区域,将其放置在单独的表。如产品表中,您将使用产品 Id 为主键。此补充表和产品表之间的关系是一对一关系。在产品表中每条记录,存在补充表中的单个匹配记录。当执行识别这种关系时,请两个表必须共享公共字段。

当您在数据库中检测一对一关系的需要时,请考虑是否都可以放在两个表中的信息一起在一个表。如果您不想要执行此操作由于某种原因,可能是因为它会导致大量的空白区域,下表显示如何在您的设计表示这种关系:

  • 如果两个表具有相同的主题,您可以可能设置关系在两个表中使用相同的主键。

  • 如果两个表具有不同的主题和不同的主键,选择一个表 (其中任何一个) 和外键将其他表中插入其主键。

确定表之间的关系,可帮助确保您有正确的表和列。时存在一对一或一对多关系,所涉及的表必须共享一个或多列。如果存在多对多关系,需要第三个表来表示关系。

返回页首

优化设计

表、 字段和所需的关系后,应创建和填充表包含示例数据以及尝试使用的信息: 创建查询,添加新记录,依此类推。这样做可帮助发现潜在问题 — 例如,您可能需要添加您忘记了您设计阶段,插入一列或者您可能有一个表拆分为两个表以消除重复。

请参阅可以使用数据库以获取所需的答案。创建窗体和报表的草稿,以及是否显示您所期望的数据。查找不必要的重复的数据,以及当您找到任何,更改您的设计,从而消除了它。

在您尝试初始数据库时,可能会发现着许多改进空间。下面是需要检查的一些事项:

  • 您是否忘记了任何列?如果是这样,该信息是否属于现有的表中?有关其他信息时,您可能需要创建另一个表。创建您需要跟踪每个信息项的列。如果无法计算其他列中的信息,则很可能会它需要一个新列。

  • 是否任何列不必要的因为它们可以从现有字段计算?如果可以从其他现有列计算信息项 — 折扣的价格计算从零售价格,例如,最好通常只需执行该操作,并避免创建新列。

  • 您重复输入相同的信息在一个表中?如果是这样,您可能需要将表拆分为两个表具有一个一对多关系。

  • 您是否已具有许多字段、 有限的数量的记录,并在各个记录中的许多空字段的表?如果是这样,考虑重新设计表,使其具有更少的字段和更多记录。

  • 每个信息项是否已拆分为其最小的有用部分?如果您需要报告、 排序、 搜索,或对项目信息的计算,将该项目在其自己的列中。

  • 每一列是否包含有关表的主题的事实?如果列不包含表格的主题的信息,它属于另一个表。

  • 表示,通过常见字段或第三个表的表之间的所有关系都?一对一和一对多关系要求公共列。多对多关系需要第三个表。

优化产品表

假设产品销售数据库中的每个产品属于常规类别,如饮料、 调味品或数据项。产品表可能包括显示的每个产品类别的字段。

假定检查并优化数据库的设计之后, 您决定要存储其名称以及类别的说明。如果类别说明字段添加到产品表,您必须为每个产品类别下之内重复每个类别说明-这不是很好的解决方案。

更好的解决方案是以进行跟踪,使用其自己的表和其自己的主键数据库的新主题的类别。您可以将主键从类别表到产品表作为外键。

类别和产品表有一个一对多关系: 一个类别可以包含多个产品,但只有一个类别可以所属产品。

当查看表结构时,请在寻找的重复组。例如,考虑表格包含以下列:

  • 产品 ID

  • 名称

  • 产品 ID1

  • Name1

  • 产品 ID2

  • Name2

  • 产品 ID3

  • Name3

在这里,每个产品是不同于其他人仅的列名称末尾添加数字的列的重复组。当您看到这种方式进行编号的列时,您应重新访问您的设计。

此类设计有几个缺点。首先,它将强制您可将上限值放在产品数。一旦超出此限制,您必须将一组新列添加到表结构,这是一种主要的管理任务。

另一个问题是有产品的最大数目少于这些供应商将浪费一些空间,,因为其他列将为空。与此类设计最严重的缺陷是这使得许多任务困难执行,如排序或索引产品 ID 或名称表。

每当您看到的重复组审阅密切与关注拆分成两个表的设计。在上面的示例会更好使用两个表、 供应商和产品,链接的供应商 id。

返回页首

应用规范化规则

在您的设计,您可以在下一步中应用数据规范化规则 (有时也简称为规范化规则)。您可以使用这些规则来查看表的正确结构。将规则应用于数据库设计过程称为规范化的数据库或只需规范化。

表示了所有信息项并已到达初步设计之后,规范化是最有用。概念旨在帮助您确保您已将信息项划分到相应的表。规范化无法是确保首先具有正确的数据的所有项目。

应用规则连续,在每个步骤,确保您的设计到达之一所谓的"普通表单"。广泛接受的范式有五个-通过五范式第一个普通的窗体。这篇文章详述前三个,因为它们是所有所需的大部分数据库设计。

第一个普通的窗体

第一个普通的窗体指出表中每行和列交叉处,存在一个值,而不是值的列表。例如,不能有一个名为您在其中放置多个价格价格字段。如果您认为的单元格为每个交叉处的行和列,每个单元格可以包含一个值。

第二个普通窗体

第二范式要求每个非键列是完全依赖于整个主键上,而不只需关键字的一部分。当有多个列组成的主键应用此规则。例如,假设您有包含以下列,其中订单 ID 和产品 ID 窗体中的主键的表:

  • 订单 ID (主键)

  • 产品 ID (主键)

  • 产品名称

此设计违反第二范式,因为产品名称是依赖于产品 ID,而不是在订单 ID,因此不依赖于整个主键。您必须从表中删除产品名称。它属于另一个表 (产品)。

第三范式

第三个范式要求不仅每个非键列依赖于整个主键,但是非键列是相互独立。

另一种强调这一点是每个非键列必须是依赖于主键及只是主键。例如,假设您有一个表包含以下列:

  • 产品 Id (主键)

  • 名称

  • SRP

  • 折扣

假定折扣取决于零售价 (SRP)。此表违反了第三范式,因为非键列折扣取决于另一非键列 SRP。列独立性表示,您应该能够更改的任何非键列,而不会影响任何其他列。如果您更改了 SRP 字段中的值,折扣将相应地变化,因此违反了该规则。在此例中折扣应被移动到另一个表键 SRP 上。

返回页首

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×