【问题标题】:When is sqlite's manifest typing useful?sqlite 的清单类型何时有用?
【发布时间】:2010-10-27 18:56:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql sqlite static-typing dynamic-typing


    【解决方案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 字节字符串。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多