17

sqlite 使用了作者称之为“ Manifest Typing ”的东西,这基本上意味着 sqlite 是动态类型的:如果需要,您可以将 varchar 值存储在“int”列中。

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

那么,这个功能什么时候有用呢?有没有人在实践中发现了它的一个很好的用途,而静态类型的列却无法做到这一点?

4

2 回答 2

5

它实际上只是使类型更易于使用。您不再需要担心这个字段在数据库级别需要多大,或者您的整数可以有多少位数。或多或少是一个'为什么不呢?事物。

另一方面,SQL Server 中的静态类型允许系统更好地搜索和索引,在某些情况下更好,但是对于所有应用程序的一半,我怀疑数据库性能改进是否重要,或者它们的性能对于其他应用程序来说“很差”原因(每次选择创建临时表,指数选择等)。

我一直将 SqlLite 用于我的 .NET 项目作为客户端缓存,因为它太容易使用了。现在,如果他们只能让它使用与 SQL 服务器相同的 GUID,我将是一个快乐的露营者。

于 2009-05-20T22:05:02.763 回答
4

动态类型对于存储配置设置等内容很有用。以 Windows 注册表为例。每个键都非常类似于具有以下形式的 SQLite 表:

CREATE TABLE 设置(名称 TEXT PRIMARY KEY、值);

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

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

于 2010-03-06T07:34:08.477 回答