主键的自动编号与文本字符串?
Autonumber vs. Text String for primary key?
我正在尝试为我刚刚遇到的问题找到最佳解决方案。我讨厌在没有理解的情况下做事,所以我希望有人能提供帮助。
我有一个 Access 数据库,其中一个 table 存储酒店信息 - 然后另一个 table 存储行程。行程 table 将 select 来自酒店列表中的酒店 table。
我想建立适当的关系,但是在连接到行程 table 上的酒店字段的酒店 table 上使用自动编号主键将不起作用。 (因为自动编号 ID 与酒店名称不匹配。)
是否更好:
一个。使用酒店名称作为酒店的主键 table,即使字符串长度可能会很长?
乙。将行程 table 上酒店字段的显示控件更改为列出酒店 table 自动编号主键的组合框 - 但将其隐藏。相反,它显示带有酒店名称的列。我在这里找到了解决方案:http://www.trigonblue.com/accesslookup.htm
这两种解决方案似乎都不完美,因为我认为解决方案 A 可能会减慢长文本字符串的索引速度,如果在 table 中插入新字段,解决方案 B 会变得混乱。
我不想在这里选择错误的答案并且在以后遇到问题。
有人可以帮我吗?如果我需要澄清我的问题的任何部分,请告诉我。
谢谢!
自动编号是设置主键的最有效方法,它是 DBMS 搜索所需内容的最少工作。如果您要在表中具有 Primary/Foreign 键关系,则尤其如此。
更不用说,出于存储目的和索引目的这样做有很多好处(对 Access 来说不是什么大问题,但对其他人来说却是大问题)。
您几乎不应该使用名称作为主键。使用 CODE
或 ID
形式的唯一 ID 是一种更安全的方法。避免使用名称允许您:
- 从标识符中提取名称
- 将名称存储在一个位置
- 如果需要,在一个位置更改名称
- 使用更少的磁盘-space 和内存。
- 执行更快的索引、插入、删除、连接、排序和分组。
有时您已经有了代码或 ID,或者您受到 internal/external 规则的限制,但大多数时候自动编号的主键非常有用。它是:
- 数字,所以存储效率高
- 数字,所以使用起来很快
- 保证唯一
- 新条目总是插入到 table 的末尾,页面移动或索引更改所需的工作最少。
用现在的高速计算机,对于几十条甚至几百条记录,使用文本或数字PK没有明显的区别,但对于数千条及以上的记录,问题就会不同, numeric 是 CPU 的朋友,因为它是处理器处理的 最简单 数据类型。如果我假设 table 将有数千条记录,那么我将使用 Neumeric 并且最好是 long 类型。
我正在尝试为我刚刚遇到的问题找到最佳解决方案。我讨厌在没有理解的情况下做事,所以我希望有人能提供帮助。
我有一个 Access 数据库,其中一个 table 存储酒店信息 - 然后另一个 table 存储行程。行程 table 将 select 来自酒店列表中的酒店 table。
我想建立适当的关系,但是在连接到行程 table 上的酒店字段的酒店 table 上使用自动编号主键将不起作用。 (因为自动编号 ID 与酒店名称不匹配。)
是否更好:
一个。使用酒店名称作为酒店的主键 table,即使字符串长度可能会很长?
乙。将行程 table 上酒店字段的显示控件更改为列出酒店 table 自动编号主键的组合框 - 但将其隐藏。相反,它显示带有酒店名称的列。我在这里找到了解决方案:http://www.trigonblue.com/accesslookup.htm
这两种解决方案似乎都不完美,因为我认为解决方案 A 可能会减慢长文本字符串的索引速度,如果在 table 中插入新字段,解决方案 B 会变得混乱。
我不想在这里选择错误的答案并且在以后遇到问题。
有人可以帮我吗?如果我需要澄清我的问题的任何部分,请告诉我。
谢谢!
自动编号是设置主键的最有效方法,它是 DBMS 搜索所需内容的最少工作。如果您要在表中具有 Primary/Foreign 键关系,则尤其如此。
更不用说,出于存储目的和索引目的这样做有很多好处(对 Access 来说不是什么大问题,但对其他人来说却是大问题)。
您几乎不应该使用名称作为主键。使用 CODE
或 ID
形式的唯一 ID 是一种更安全的方法。避免使用名称允许您:
- 从标识符中提取名称
- 将名称存储在一个位置
- 如果需要,在一个位置更改名称
- 使用更少的磁盘-space 和内存。
- 执行更快的索引、插入、删除、连接、排序和分组。
有时您已经有了代码或 ID,或者您受到 internal/external 规则的限制,但大多数时候自动编号的主键非常有用。它是:
- 数字,所以存储效率高
- 数字,所以使用起来很快
- 保证唯一
- 新条目总是插入到 table 的末尾,页面移动或索引更改所需的工作最少。
用现在的高速计算机,对于几十条甚至几百条记录,使用文本或数字PK没有明显的区别,但对于数千条及以上的记录,问题就会不同, numeric 是 CPU 的朋友,因为它是处理器处理的 最简单 数据类型。如果我假设 table 将有数千条记录,那么我将使用 Neumeric 并且最好是 long 类型。