什么是NoSQL数据库、OODB或其他可能存在的缩写的最佳实践?
例如,我经常看到一个字段“type”用于决定客户端应该如何解释DB文档(按couchDB/mongoDB术语),也就是应用程序。
如果适用的话,请使用PHP作为参考语言。阅读:我也对如何在客户端最好地处理此类数据感兴趣,不仅仅限于严格的DB结构。这实际上意味着我还在寻找像SQL DB的“ORM”模式(活动记录,数据映射器等)。
请毫不犹豫地提出关于这样的DB和PHP 5.3新功能如何最好地协同工作的陈述。
我认为当前NoSQL数据存储和文档数据库的整体理念与传统关系型存储驱动的想法相比,是如此新颖和不同,以至于目前几乎没有(如果有)最佳实践。
我们现在知道,在CouchDB(或任何其他文档数据库)中存储数据的规则与关系型数据库非常不同。例如,基本可以确定的是,规范化和追求第三范式并不是应该努力的目标。一个普遍的例子是一个简单的博客。
在关系型存储中,你会为“文章”、“评论”和“作者”各自创建一张表。每个作者都有很多篇文章,每篇文章都有很多评论。这是一个足够好的模型,并且可以映射到任何关系型数据库上。但是,在文档数据库中存储相同的数据可能会有所不同。你可能会有一组帖子文档,每个文档都有自己的作者和评论集合。当然这可能不是唯一的方法,它也是一种妥协(现在查询单个帖子很快——只需执行一个操作并获取所有内容),但你无法维护作者和帖子之间的关系(因为它们都成为了帖子文档的一部分)。
我也看到过使用“type”属性的示例(在CouchDB示例中)。当然,这听起来是一个可行的方法。它是最好的方法吗?我不知道。当然,在MongoDB中,你会在数据库中使用不同的集合,使得type属性变得毫无意义。但在CouchDB中...也许那是最好的。其他选择?为每种类型的文档单独创建数据库?这似乎有点疯狂,所以我会倾向于自己选择“type”解决方案。但这只是我的想法。也许有更好的解决方案。
我意识到我在这里唠叨了很多,但实际上并没有说什么你不知道的东西。我的观点是 - 我认为我们需要用手头的工具和正在处理的数据进行实验,随着时间的推移,好的想法将会传播并成为最佳实践。我只是觉得你在游戏开始时就过早地问了一些问题。