2009-05-20 47 views
14

sqlite使用作者称之为“Manifest Typing”的东西,这基本上意味着sqlite是动态类型化的:如果需要,可以将“varchar”值存储在“int”列中。什么时候sqlite的清单输入有用?

这是一个有趣的设计决定,但是每当我使用sqlite时,我都像使用标准RDMS一样使用它,并将它们视为静态类型。事实上,我从来没有希望在其他系统中设计数据库时使用动态类型的列。

那么,这个功能何时有用呢?有没有人在实践中发现它很好用,而静态类型的列不能轻易完成?

回答

5

它确实只是使类型更易于使用。您不必担心该字段在数据库级别需要多大,或者您的整数可能有多少个digets。或多或少,这是'为什么不呢?'事情。另一方面,SQL Server中的静态类型允许系统更好地进行搜索和索引,在某些情况下好得多,但对于所有应用程序中的一半,我怀疑数据库性能改进是否重要,或者它们的性能是“由于其他原因(每个选择产生临时表,指数选择等)。

我一直在使用SqLite作为客户端缓存,因为它太简单了。现在,如果他们只能使用与SQL服务器相同的GUID,我将成为一名快乐的露营者。

+2

这是一个很好的观点,例如,varchar字段不再局限于一定数量的字符,这是一直困扰着我的传统RDMS。 – 2009-05-21 15:53:19

4

动态类型对于存储配置设置等内容非常有用。例如,以Windows注册表为例。每个密钥都很像有一个SQLite表的形式:

CREATE TABLE Settings(Name TEXT PRIMARY KEY,Value);

其中Value可以是NULL(REG_NONE)或INTEGER(REG_DWORD/REG_QWORD),TEXT(REG_SZ)或BLOB(REG_BINARY)。

此外,我必须同意Jasons关于不对字符串实施最大大小的有用性。因为很多时候,这些限制纯粹是任意的,你可以指望有一天发现一个需要存储在你的VARCHAR(32)中的32字节的字符串。

相关问题