如何获得更多RDBMS功能但仍然使用SQLite?

时间:2009-08-26 16:37:27

标签: .net sqlite mono

我决定将SQLite用于我的个人开发项目,因为它刚刚从我的计算机中脱颖而出,似乎是我自己的意志,我想了解更多。问题是,我开始真的错过了我习惯使用重量级RDBMS的许多功能:存储程序,约束,DRI,DateTime等复杂数据类型。

我非常喜欢“数据库作为文件”的概念,但我发现自己从头开始实施了许多完整性功能。

所以,正如标题所说,我很好奇:产品中是否有更多我不知道的功能?是否有根据需要添加功能的工具或库(最好是.Net)?还有另一个版本更强大吗?

我正在使用Mono 2.4和Mono.Data.SQLite。

4 个答案:

答案 0 :(得分:5)

at least a few ways to enforce foreign key constraints。该页面解释了如何使用触发器进行操作,并且它链接到至少两个站点,这些站点将以编程方式将正常的外键约束转换为触发器。

因为SQLite使用清单类型,所以您可以在任何列中存储任何类型。您不能精确地需要“像DateTime这样的复杂数据类型”,因为您可以在任何地方存储blob(序列化数据),或者您可以将任何您想要的内容存储为字符串。请注意,SQLite核心中也有a number of datetime functions - 它们只对数字或字符串(或两者,由于自动转换)进行操作,具体取决于函数。当字符串在这里足够时,不需要日期“类型”。这是SQLite保持如此小巧便携的方式之一。

答案 1 :(得分:2)

我认为线索的名称是SQ Lite

它的设计目的是为嵌入式使用提供足够的功能,但其他功能却很少。但如果您的应用程序需要,可以在其他功能上进行分层。

虽然可以嵌入alternative databases you

答案 2 :(得分:2)

不幸的是,SQLite不支持你习惯的一些不错的功能。如果你想使用它,你必须习惯没有它们。

但是,还有其他单文件DB以这种方式工作。例如,VistaDB支持Mono(它是100%管理的),并提供存储过程,约束等。它与MS SQL共享大部分相同的功能集,包括具有非常相似的接口(尽管存在细微差别) )。

答案 3 :(得分:0)

您提到的一些功能主要是因为通常的客户端/服务器分离。有了像SQLite这样的嵌入式DB库,它不再是客户端/服务器,而是一个分层的架构。

例如,存储过程。如果SQLite管理它们或者你的程序是什么,它会有什么不同?他们都在同一个进程和相同的内存空间!它只是存储顶部的一层。更好的是,您可以使用自己的语言而不是某些“程序化SQL”。同样,对于复杂的类型和约束。

只是一些警告:

  • 您必须编写缺少的图层,SQLite不会提供它们。 (OTOH,它们将根据您的口味和需求而定。)
  • 要真正处理您自己图层中的约束,您必须确保通过图层进行所有访问。