Bra*_*sen 18 database sqlite dynamic-typing
与其他SQL版本相比,SQLite3使用动态类型而不是静态类型.在SQLite的网站上写着:
大多数SQL数据库引擎(除了SQLite之外的每个SQL数据库引擎,据我们所知)都使用静态,严格的类型.使用静态类型时,值的数据类型由其容器(存储值的特定列)确定.
SQLite使用更通用的动态类型系统.在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联.
在我看来,这正是你不想要的,因为它允许你存储整数列中的字符串.
页面继续:
... SQLite中的动态类型允许它执行传统的刚性类型数据库中无法实现的操作.
我有两个问题:
这在SQLite中称为类型亲缘关系.
根据SQLite网站的说法,他们这样做是为了"最大化SQLite和其他数据库引擎之间的兼容性".(见上面的链接)
SQLite支持列上的"类型亲和性"概念.列的类型亲缘关系是存储在该列中的数据的推荐类型.这里的重要思想是建议使用类型,而不是必需的.任何列仍然可以存储任何类型的数据.根据选择,某些列更倾向于使用一个存储类而不是另一个存储类.列的首选存储类称为"亲和性".
我的理解是SQLite正是它的名字 - 一个非常轻量级的简约数据库引擎.与强类型相关的开销可能超出了项目的范围,最好留给使用SQLite的应用程序.
但同样,根据他们的网站,他们已经这样做,以最大限度地兼容其他数据库引擎.
如果您查看 Firefox 的“about:config”页面,我相信这些设置实际上存储在 SQlite 数据库中(不过,我不是 100% 确定)。使用 SQlite 的动态类型的好处是设置中的每个值都可以是强类型的(例如“alerts.totalOpenTime”设置是一个整数,而“app.update.channel”是一个字符串)而不必有一个单独的每个类型的列。
最后,它基本上与编程语言的论点相同:为什么在编程语言中使用动态类型而不是静态类型?
| 归档时间: |
|
| 查看次数: |
2271 次 |
| 最近记录: |