sqlite 的清单类型何时有用?
Posted
技术标签:
【中文标题】sqlite 的清单类型何时有用?【英文标题】:When is sqlite's manifest typing useful? 【发布时间】:2010-10-27 18:56:04 【问题描述】:sqlite 使用了作者称之为“Manifest Typing”的东西,这基本上意味着 sqlite 是动态类型的:如果需要,您可以将 varchar 值存储在“int”列中。
这是一个有趣的设计决定,但每当我使用 sqlite 时,我都会像使用标准 RDMS 一样使用它,并将类型视为静态类型。事实上,在其他系统中设计数据库时,我什至从未想过动态类型的列。
那么,这个功能什么时候有用?有没有人在实践中发现了它的一个很好的用途,而静态类型的列却无法做到这一点?
【问题讨论】:
【参考方案1】:它实际上只是让类型更易于使用。您不再需要担心该字段在数据库级别需要多大,或者您的整数可以有多少位数。或多或少是一个'为什么不呢?事物。
另一方面,SQL Server 中的静态类型允许系统更好地搜索和索引,在某些情况下更好,但对于所有应用程序的一半,我怀疑数据库性能改进是否重要,或者它们的性能“很差” ' 出于其他原因(每次选择、指数选择等都会创建临时表)。
我一直将 SqlLite 用于我的 .NET 项目作为客户端缓存,因为它太容易使用了。现在,如果他们只能让它使用与 SQL Server 相同的 GUID,我将是一个快乐的露营者。
【讨论】:
这是一个很好的观点,例如,varchar 字段不再限于一定数量的字符,这是传统 RDMS 一直困扰我的问题。 我认为除了我的之外,至少还有其他一些“答案”。这只是更多的证据表明我们需要更多地使用 Sqlite.NET。它非常易于使用和部署在您不需要 SQL Server 或 Express 的地方。【参考方案2】:动态类型对于存储配置设置等内容很有用。以 Windows 注册表为例。每个键很像一个 SQLite 表的形式:
CREATE TABLE 设置(名称 TEXT PRIMARY KEY、值);
其中 Value 可以是 NULL (REG_NONE) 或 INTEGER (REG_DWORD/REG_QWORD)、TEXT (REG_SZ) 或 BLOB (REG_BINARY)。
另外,我必须同意 Jasons 关于不强制字符串最大大小的有用性。因为很多时候,这些限制纯粹是任意的,你可以指望有一天会找到一个需要存储在 VARCHAR(30) 中的 32 字节字符串。
【讨论】:
Postgres 是强类型的,但类型text
是无限宽度的 varchar - ***.com/q/4848964/5419599 - 所以这对我来说似乎不是弱类型的有力案例。以上是关于sqlite 的清单类型何时有用?的主要内容,如果未能解决你的问题,请参考以下文章
Android API 28 使用啥 SQLite 版本,历史上何时更新? [复制]