Database design Ms Access:对于可变长度的文本字段,是否需要较小的大小

Database design Ms Access:对于可变长度的文本字段,是否需要较小的大小,database-design,ms-access,field,Database Design,Ms Access,Field,在Ms Access MDB中,限制可变长度文本字段的大小是否会节省磁盘空间 例如,如果我有一个大小为20的可变长度Text字段,并且该字段的所有实际值都在10字符以下,我是否在浪费空间 最好将字段的大小设置为10,还是没有任何区别?字段存储为可变长度,因此将大小设置为255,或者10不会减少或更改数据文件的大小。我认为这是在内存昂贵的时候遗留的属性 您可以将其用作数据验证方法,即如果字段中包含电话号码,然后给出长度10将防止输入无效和国际电话号码。应适当选择字段长度,因为它会影响索引性能和存储

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

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


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

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

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


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

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

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


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

尽管没有明确说明,我想你们会问,对于可变长度字符串的限制,数据存储是否有区别:使用更大或更小的限制并没有区别。从MSDN讨论JET(Access中的db引擎)的文本数据类型

通常,文本字段最多可包含255个字符, […]此外,文本字段的未使用部分不会保留在中 记忆

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

没有

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


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

不清楚您是否真的有访问权限或只是在使用MDB文件,但如果您有访问权限,我强烈建议您使用这个名为“帮助文件”的方便小东西。你可能会惊讶于你从那里学到的东西。@David:这有什么区别?这个问题将适用于这两种情况。我不认为这个问题会包含在帮助文件中。你自己看过帮助文件吗?如果没有,请看一看,然后再联系我们。我不知道该如何回答这个问题。“好主意”的定义是什么?确定它是否有用的基准是什么。?在我看来,这不是一个措辞得体的问题,赏金不足以起到帮助作用。@David:问题只是减少MDB中可变长度文本字段的大小是否可取。一个好的答案将涵盖所有可能起作用的因素。UI不是在验证输入吗?尽管人们明智地利用UI提供的任何工具来验证用户输入,但数据库引擎本身应该尽可能多地强制输入有效数据。选择字段长度是执行此操作的引擎级工具之一。@David:UI应该在进入数据库之前验证任何输入。您的回答似乎暗示,不需要限制列的大小,这与另一个问题有关:数据库还是应用程序先来?是的,UI应该在输入到达数据库之前验证所有输入。但是数据库还应该有防止无效数据的验证规则和索引。您不知道所有的数据输入/编辑都将通过您创建的应用程序进行,也不能保证在UI验证中不会出现错误,或者以其他方式引入错误。您需要皮带和吊带,否则您的应用程序很弱。请详细说明它对存储的影响。具体而言,索引存储:“更宽”的索引占用更多的数据页,从而更快地碎片化,从而降低性能。索引越窄,搜索速度越快,因为它的数据越少。有参考资料吗?奇怪的是,索引空间与列定义相关,而与列的实际使用情况无关。你说得对,@pascal。可以使用索引定义一个100个字符的列,但如果最大长度为10,则索引可能不会比列设置为10占用更多的空间。然而,如果在一个有着如此多潜在空闲空间的列上建立索引没有任何性能问题,我也不会感到惊讶,但我没有这方面的文档,只是这些年来与Jet合作的直觉。就像强数据类型一样,对我来说,这似乎是一个很好的设计。即使这个字段是PK的一部分?在这种情况下,会不会对性能和大小产生影响?我的意思是:表Customers有一个主键=CustId Text(50)。CustID永远不会超过10个字符。通过将CustId字段设置为文本(10),db会更快更小吗?@iDevlop我怀疑这会对索引大小产生影响,因为我认为索引“pads”字段的值不会达到al