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

时间:2016-09-17 22:28:45

标签: ms-access primary-key access primary-key-design

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

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

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

是否更好:

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

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

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

有时您已经拥有代码或ID,或者您受到内部/外部规则的约束,但大多数情况下,AutoNumbered主键非常有用。它是:

  • 数字,因此可以有效存储
  • 数字,因此可以快速使用
  • 保证独特
  • 新条目总是插入到表的末尾,并且只需要很少的精力来进行页面移动或索引更改。

答案 1 :(得分:2)

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

更不用说,出于存储目的和索引目的这样做是有好处的(对Access不是很重要,但在其他情况下会是如此)。

答案 2 :(得分:0)

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