【问题标题】:Ms-Access: any need to have a low size for variable-length text fieldsMs-Access:任何需要变长文本字段的小尺寸
【发布时间】:2011-03-18 18:34:28
【问题描述】:

在 Ms-Access MDB 中,是否会节省磁盘空间来限制可变长度文本字段的大小?

例如。如果我有一个大小为20 的可变长度Text 字段,并且该字段的所有实际值都在10 字符下,我是否在浪费空间?

将字段的大小设置为10会更好,还是没有任何区别?

【问题讨论】:

  • 不清楚您是否真的有 Access 或只是使用 MDB 文件,但如果您有 Access,我强烈建议您利用这个称为帮助文件的方便的小东西。您可能会惊讶于您可以通过查看那里学到的东西。
  • @David:这有什么不同?这个问题将适用于这两种情况。而且我认为帮助文件不会涵盖这个问题。
  • 您自己查看过帮助文件吗?如果没有,请查看然后回复我们。
  • 我不知道如何回答这个问题。什么定义了“好主意”?您确定它是否有用/有用等的基准是什么?在我看来,这不是一个措辞得体的问题,不足以让赏金有所帮助。
  • @David:问题很简单,是否建议减少 MDB 中可变长度文本字段的大小。一个好的答案将涵盖所有可能发挥作用的因素。

标签: database-design ms-access field


【解决方案1】:

如果我有一个大小为 20 的可变长度文本字段,并且该字段的所有实际值都小于 10 个字符,我是否在浪费空间?

没有。

将字段的大小设置为 10 会更好,还是没有任何区别?

如果不接受超过 10 个字符的值,最好将字段大小限制设置为 10。如果用户可以输入 11 到 20 个字符之间的值,则将限制保留为 20。在这种情况下,磁盘空间使用不是问题。

【讨论】:

  • 即使该字段是 PK 的一部分?在这种情况下不会对性能和尺寸产生影响吗?
  • 我的意思是:表客户有一个主键 = CustId Text(50)。 CustID 永远不会大于 10 个字符。通过将 CustId 字段设置为 Text(10) 会更快更小吗?
  • @iDevlop 我怀疑它会对索引大小产生影响,因为我认为索引不会将字段值“填充”到允许的字段宽度。我不知道性能影响。
【解决方案2】:

应该适当地选择字段的长度,因为它会影响索引性能和存储,因为更长的值会产生更多的数据页。当然,如果数据是真实的,即真实值需要那么长,你就需要它。因此,如果您有一个 50 个字符的字段并且最长值为 10 个字符,则索引不会占用比该字段为 10 个字符更多的空间。

但是选择适当的限制有助于设计表单和报告 - 如果您将字段设置得太长,您最终可能会得到无法正确显示/打印的异常记录。另一方面,您不希望它太短以致用户无法在其中放入正常数据。字段长度是数据验证的最基本形式,因为您正在决定该字段的适当值的范围。

我的基本原则是,我为具有常规格式的数据选择尽可能短的字段长度(即使它偶尔会有例外),但对于不具有常规格式的字段则要慷慨。

【讨论】:

  • 请详细说明它对存储的影响。
  • 索引存储特别是:“更宽”的索引占用更多的数据页,从而更快地碎片化,从而降低性能。更窄的索引可以更快地搜索,因为它的数据更少。
  • 有什么参考吗?索引空间与列定义相关,而不是与列实际使用情况有关,这似乎很奇怪。
  • 你是对的,@pascal。您可以使用索引定义一个 100 个字符的列,但如果最大长度为 10,则索引可能不会比您的列设置为 10 占用更多的空间。不过,如果有不是与在具有如此多潜在松弛空间的列上建立索引相关的性能问题,但我没有这方面的文档,只是这些年来与 Jet 合作的直觉。就像强大的数据类型一样,它对我来说似乎是很好的设计。
【解决方案3】:

虽然没有明确说明,但我想您是在问数据存储与可变长度字符串的限制是否有区别:使用更大或更小的限制不会有区别。来自 MSDN,讨论 JET(Access 中的数据库引擎)的 TEXT 数据类型

一般而言,文本字段最多可包含 255 个字符, [...] 此外,文本字段的未使用部分不会保留在 记忆。

【讨论】:

    【解决方案4】:

    我认为这是内存昂贵时的遗留属性。

    您可以将其用作数据验证的方法,即如果该字段包含电话号码,则长度为 10 将防止输入无效和国际电话号码。

    【讨论】:

    • UI 不会验证输入吗?
    • 虽然明智的做法是利用 UI 提供的任何工具来验证用户输入,但数据库引擎本身应该尽可能多地强制输入有效数据。选择字段长度是执行此操作的引擎级工具之一。
    • @David:用户界面应该在输入到数据库之前验证任何输入
    • 认为没有必要限制列的大小,正如您的回答似乎暗示的那样,涉及到另一个问题:数据库或应用程序哪个先出现? stackoverflow.com/questions/3305958/…
    • 是的,UI 应该在所有输入到达数据库之前对其进行验证。但是数据库还应该有防止无效数据的验证规则和索引。您不知道所有数据输入/编辑都将通过您创建的应用程序进行,并且您不能保证在 UI 验证中不会出错,或者以其他方式引入错误。你需要腰带和吊带,否则你的应用很弱。
    【解决方案5】:

    字段存储为可变长度,因此将大小设置为 255 或 10 不会减小或更改数据文件的大小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多