2

我正在尝试为我刚刚遇到的问题找到最佳解决方案。我讨厌在不理解的情况下做事,所以我希望有人能提供帮助。

我有一个 Access 数据库,其中包含一个存储酒店信息的表 - 然后是另一个存储行程的表。行程表将从酒店表上的酒店列表中进行选择。

我想建立一个正确的关系,但是在连接到 Itineraries 表的 Hotels 字段的 Hotels 表上使用自动编号主键将不起作用。(因为自动编号 ID 与酒店名称不匹配。)

是否更好:

A. 使用酒店名称作为酒店表上的主键,即使字符串长度可能会变得很长?

B. 将 Itineraries 表的 Hotels 字段上的显示控件更改为一个组合框,该组合框列出了 Hotels 表的自动编号主键 - 但将其隐藏。相反,它显示带有酒店名称的列。我在这里找到了解决方案:http ://www.trigonblue.com/accesslookup.htm

这两种解决方案似乎都不完美,因为我认为解决方案 A 可能会使用长文本字符串减慢索引速度,如果在表中插入新字段,解决方案 B 会变得混乱。

我不想在这里选择错误的答案并在路上遇到问题。

有谁可以帮我离开这里吗?如果我需要澄清我的问题的任何部分,请告诉我。

谢谢!

4

3 回答 3

3

您几乎不应该使用名称作为主键。使用CODEor形式的唯一 IDID是一种更安全的方法。避免使用名称可以让您:

  • 从标识符中提取名称
  • 将名称存储在一个位置
  • 如果需要,在一个位置更改名称
  • 使用更少的磁盘空间和内存。
  • 执行更快的索引、插入、删除、连接、排序和分组。

有时您已经有了代码或 ID,或者您受到内部/外部规则的限制,但大多数时候自动编号的主键非常有用。这是:

  • 数字,因此可以有效地存储
  • 数字,因此使用起来很快
  • 保证独一无二
  • 新条目总是插入到表的末尾,并且只需要很少的页面移动或索引更改。
于 2016-09-18T08:06:12.693 回答
2

自动编号是设置主键的最有效方式,它是 DBMS 搜索以查找所需内容的最少工作量。如果您要在表中具有主键/外键关系,则尤其如此。

更不用说,为了存储目的和索引目的,这样做有好处(在 Access 上不是什么大问题,但在其他方面却是)。

于 2016-09-17T22:32:30.140 回答
0

使用当前的快速计算机,对于几十或可能是数百条记录,使用文本或数字 PK 没有明显区别,但肯定对于数千条和以上记录,问题会有所不同,数字是朋友CPU ,因为它是处理器使用的最简单的数据类型。如果我假设一个表将有数千条记录,那么我将使用 Neumeric 并且最好使用 long 类型。

于 2020-06-16T23:00:07.277 回答