为什么数据库引擎不能使用自动列数据类型?

时间:2016-10-13 14:00:29

标签: sql database-design theory database-engine

在数据库中定义表时,我们将列类型设置为int / varchar等。 为什么不能设置为自动?

数据库将从输入中识别并设置类型本身,就像php处理变量一样。此外,youtube不必崩溃他们的统计数据。

1 个答案:

答案 0 :(得分:0)

在某些情况下,您可以(例如SQL Server的sql_variant或Oracle的ANYDATA)。

这是一个好主意是另一回事......

首先,没有显式模式(在数据库中),并不意味着您可以避免隐式模式(隐含在您的客户端应用程序期望的模式)。例如,仅仅因为您在数据库中有一个字符串,并不意味着您的应用程序将能够使用它,如果它最初实现为期望一个数字。这实际上是动态与静态类型的争论,静态类型通常被认为是非平凡程序的优势。

此外,这些“变体”类型通常具有显着的开销,并且从索引和sargability角度来看存在问题。例如,2小于10吗?是的,如果这些是数字,如果它们是字符串则不是!

因此,如果你知道你对数据库的期望(你在99%的情况下做了什么),请告诉数据库,以便它可以为你进行类型检查和优化!