主键的自动编号与文本字符串?

问题描述 投票:0回答:3

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

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

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

是否更好:

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

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

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

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

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

谢谢!

ms-access primary-key primary-key-design
3个回答
3
投票

您几乎不应该使用名称作为主键。使用

CODE
ID
形式的唯一 ID 是一种更安全的方法。避免使用名称可以让您:

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

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

  • 数字,因此可以有效存储
  • 数字,所以使用起来很快
  • 保证独一无二
  • 新条目始终插入到表的末尾,并且只需最少的努力即可进行页面移动或索引更改。

2
投票

自动编号是设置主键的最有效方法,对于 DBMS 来说,通过搜索来查找所需内容是最少的工作。如果您的表中要具有主键/外键关系,则尤其如此。

更不用说,出于存储目的和索引目的这样做有很多优点(对 Access 来说没什么大不了的,但对其他人来说就很重要了)。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.