以下部分演示如何设计数据库表关系。 提供了对象名称,以便你可以在 Northwind 2.0 Starter Edition 数据库中轻松检查它们。
若要打开关系图,显示六个表及其之间的关系,请选择“ 数据库工具 > 关系”。
此图显示了所有六个表。 在关系图中,表之间的线条标识它们之间的关系。 行尾的 1 和无穷大符号 (∞) 表示关系 (例如,一个客户) 和关系的多侧。 例如,一个客户提交许多订单。 有关详细信息,请参阅 表关系指南。
以下原则适用于 Northwind 2.0 Starter Edition 中的表以及一般表。
主键 唯一标识表中的每条记录。 所有表都有一个主键。 在关系图中,键符号标识这些主键。 主键命名约定是针对它们所在表命名的,例如“TableNameID”。
效率 为了获得更好的性能和更高效的存储,主键应为数值。 此外,让 Access 为每个新记录的主键自动生成新的唯一值会更方便。 自动编号数据类型具有这两个特征。 自动编号是非有意义的数字,不用于其他目的。 有关详细信息,请参阅外键 表还可以具有一个或多个外键,具体取决于它是否与数据库中的其他表相关。 外键包含与相关表的主键中的值对应的值。
唯一索引 表中的其他字段可能也有其自己的唯一索引,例如 OrderStatus.StatusCode。 在 OrderStatus 表中具有相同代码的两个 Order Statuss 是不合逻辑的,即使 StatusCode 本身不是主键。 唯一索引指示 Access 防止该字段中出现重复值。
非唯一索引 表可能还具有索引来加快对这些字段的搜索和排序速度,例如 Orders.OrderDate。 许多订单可以放在同一天,并且你经常希望在“订单日期”上搜索和排序。 该字段上有一个非唯一索引,可加快搜索和排序速度。
表和字段名称 你可以根据需要任意命名内容,但一致性很重要。 建议表名和字段名称应为一个或多个字词,且之间没有空格,并且没有特殊字符,例如斜杠 (/) 、井号 (#) 或百分比 (%) 。 例如,使用 OrderDate,但不要使用订单日期;使用 OrderNumber 或 OrderNo,但不能使用 Order#。
CamelCase 大写单词以突出显示名称的各个部分,例如 OrderDate,但不能突出显示 Orderdate 或 orderDate。
必需值 此原则提出业务规则对应用程序的重要性。 某些情况需要某些字段中的值甚至特定值。 例如,在不知道下订单的客户的情况下,订单有什么好处? 这意味着 CustomerID 是 Orders 表的必填字段。
计算字段 Access 支持表中的计算字段,例如 Employees.FullName 字段。 你可能更倾向于在查询中创建计算字段,而不是在表中创建计算字段。
附件字段 Access 支持附件字段,例如 Employees.Picture,用于保存员工图片。 附件可以存储图像、文档、电子邮件和其他二进制信息。 附件在数据库中占用大量空间。 将附件存储在文件服务器上更为高效。
多值字段 顾名思义,多值字段在单个字段中存储一个或多个值,例如 Employees.Title。 建议谨慎使用它们,尤其是在想要扩大数据库时。 大多数其他数据库系统没有它们,因此需要大量重新工作。
有关数据类型的详细信息,请参阅数据类型和字段属性简介。
本部分讨论每个表最重要的功能。 若要查看表的设计,请在导航窗格中将其选中,右键单击该表,选择 “设计视图”,或选择“ 数据库工具 > 关系”,然后右键单击表对象。 有关详细信息,请参阅 表简介。
重要: 避免使用可能导致命名冲突的保留字。 有关详细信息,请参阅 了解 Access 保留字和符号。
Employees 表
此表存储有关 Northwind 员工的信息。
Fields |
描述 |
FirstName、LastName |
这两个名称是必需的,在 Northwind 中,它们必须是唯一的组合。 在表设计中,打开“ 索引 ”对话框时,可以看到 FirstName + LastName 具有唯一索引。 由于 FirstName 和 LastName 是唯一索引的,因此 Northwind 表无法存储两个具有相同名称的员工。 在其他情况下,可以使用其他业务规则。 |
FullNameFNLN、 FullNameLNFN |
查看计算字段的表达式属性,了解 Access 如何合并计算字段中的值。 若要包含中间的首字母,请将其添加到在组件之间具有适当间距的现有表达式。 |
电话字段 |
电话的业务规则是,员工偏好比服务类型更相关。 因此,使用主要和次要电话号码,而不是手机、办公室、家庭等。 |
称呼 |
“称呼”是“短文本”字段。 为了说明 Access 中的多值字段功能,它是一个组合框,其中包含可编辑的预定义值列表。 此类简短的静态列表通常是多值字段的候选项,因为它们不会有太大变化(如果有的话)。 |
JobTitle |
JobTitle 是另一个必填字段。 |
Customers 表
此表存储有关 Northwind 客户的信息。
Fields |
描述 |
CustomerName |
Northwind 的客户是企业,需要客户名称。 不过,与员工姓名不同,它不是唯一的索引,允许两个或更多客户具有相同的名称。 |
PrimaryContactFirstName、PrimaryContactLastName、 PrimaryContactJobTitle |
不需要主要联系人的名字和姓氏以及职务,因为客户可能没有一个人作为其主要联系人。 联系人不得为订单提供其职务。 |
BusinessPhone |
Northwind 为每个客户只需要一个电话号码,不过这消除了为客户或客户联系人捕获多个电话号码的能力。 在实际情况下,更复杂的业务规则通常适用于联系信息。 |
地址、城市 State、ZIP |
Northwind 需要地址才能将订单寄送给客户。 客户只有一个通用地址。 在实际情况下,客户通常具有单独的计费、发货或其他地址。 组织的其他业务规则需要其他字段。 |
注意 |
“备注”字段是一种长文本数据类型,最多可存储 1 GB 文本。 这样,就可以输入有关客户的详细注释,以便在后续订购情况下使用。 |
Orders 表
此表存储有关 Northwind 订单的信息。
Fields |
描述 |
OrderDate、ShippedDate、PaidDate |
订单需要三个日期。 它们都是日期/时间数据类型,但有两种格式。 OrderDate 具有日期和时间,因为您可能有兴趣分析一天中不同部分的订单量。 对于其他两个日期,仅需要日期。 ShippedDate 和 PaidDate 的表验证规则可确保这些日期不早于 OrderDate。 |
OrderStatusID |
订单状态指示订单在 Northwind 工作流中的位置。 订单将经历四个阶段: 新 > 开票 > 发货 > 关闭。当前 OrderStatus 的外键使用 OrderStatus 查找表中的 OrderStatusID。 使用状态查找表可确保只能将四个预定义状态分配给订单。 |
订单详细信息表
此表存储有关 Northwind 的订单详细信息的信息。
Fields |
描述 |
OrderID |
OrderDetails 表中的每个行项都必须属于 Orders 表中的一个 Order。 OrderID 是标识该订单的外键。 如前所述,包含一个或多个行项的订单说明了一对多关系。 |
ProductID |
OrderDetails 表中的每个记录都包含订购的产品的 ProductID。 ProductID 是 OrderDetails 表中的外键,按该顺序标识该产品。 这也是一对多关系。 |
OrderID+ ProductID |
正如你在 Employees 表中所看到的,多个字段可以具有唯一的索引。 OrderDetails 表中 OrderID+ProductID 的唯一索引可确保每个订单仅包含一次产品。 从功能区打开“索引”属性表时,可以看到此唯一索引。 |
产品表
此表存储有关 Northwind 产品的信息。
Fields |
描述 |
ProductCode |
除了主键 ProductID 之外,Northwind 产品还有一个人性化且索引唯一的产品代码。 员工通常引用产品代码而不是主键值。 产品代码是一个复合值,由类别指定和数字组成,例如,B-1 表示“饮料”,产品 1。 |
产品名称, 产品说明 |
除了短文本产品名称外,长文本说明也适用于产品。 此值可用于目录说明或回答客户问题。 |
UnitPrice |
所有产品均按单价出售,使数据库简化为功能展示。 在大多数实际情况下,定价通常要复杂得多。 |
另请参阅