繁体   English   中英

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

[英]Autonumber vs. Text String for primary key?

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

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

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

是否更好:

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

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

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

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

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

谢谢!

您几乎不应该使用名称作为主键。 CODEID的形式使用唯一 ID 是一种更安全的方法。 避免使用名称允许您:

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

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

  • 数字,所以它被有效地存储
  • 数字,因此使用起来很快
  • 保证独一无二
  • 新条目总是插入到表的末尾,并且需要最少的页面移动或索引更改工作。

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

更不用说,这样做有利于存储目的和索引目的(对 Access 来说没什么大不了的,但对其他人来说却是)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM