再次,抱歉我的愚蠢问题,但似乎我从关系数据库中学到的东西应该“擦除”,没有连接,那么我将如何绘制使用NoSql中的Merise和UML?
http://en.wikipedia.org/wiki/Class_diagram
这个不适用于NoSql吗?
答案 0 :(得分:5)
如何组织项目是一种独立的持久性技术概念;特别是; UML或ERD或任何此类工具不仅特别适用于关系数据库,也不适用于文档数据库。
NoSQL有“没有加入”的想法既愚蠢又无益。 (大多数)文档数据库不提供连接运算符是完全正确的。但这只是意味着当你需要连接时,你可以在应用程序代码而不是查询语言中进行连接;组织项目的基本事实保持不变。
另一个不同之处在于,文档数据库使表达某些事情变得更容易,而其他事情更难。例如,关系数据库中的实体关系约束通常更容易,但在文档数据库中表达继承层次更容易。两种技术都支持 这两个概念,当您的应用程序需要它们时,您肯定会使用它们;无论您最终使用何种技术。
简而言之,您应该在不首先选择持久性技术的情况下设计应用程序。一旦你清楚了解了你想要坚持的东西,你就可以更好地了解哪种技术更适合。可能是你真正需要的是两者,或者你可能需要一些完全不同的东西。
编辑:外键的想法不仅仅是简单地说“这就是这种事物的名称”。碰巧许多SQL数据库提供了一些非常简洁和有用的功能来处理这类事情;具体来说,约束(此列引用此其他关系;因此除非在referant中存在相应的行,否则它不能取值),并且级联,(如果引用的状态发生更改,则对引用进行相应的更改)。这确实使得即使在最低级别也能保持数据一致,因为没有办法告诉数据库进入缺少指示对象的状态。
要区分的重要一点是,给出数据库实体(关系数据库中的一行,文档数据库中的文档)的想法与模式约束的概念不同。文档数据库的一个好处是它们可以轻松地组合或重新定位数据存在的位置,这样您就不必总是拥有实际存在的反驳者;大多数文档数据库使用文档类作为键的一部分,因此您仍然可以确保键是有意义的,即使引用实际上不存在时也是如此。
但大部分时间,你实际上做希望指称对象存在;您不希望博客文章有作者,除非该作者实际存在于您的系统中。这种支持的程度在很大程度上取决于特定的文档数据库;某些数据库做提供触发器或其他工具来强制执行引用的完整性,但许多其他数据库仅提供某种事务功能,这要求在应用程序中强制执行完整性。
重点是;对于大多数类型的数据库,数据库中的每个值都有某种类型的标识符;在关系数据库中,这是关系的三倍:column:key;在文档数据库中,它通常类似于对document_class:path。当您需要一个实体引用另一个实体时,您可以使用所需的任何类型的键来标识该类型数据库的该数据。在RDBMses中找到的外键约束只是(非常有用)语法糖“如果不存在则存在然后引发ForeignKeyError”,这可以通过其他方式以相同的功率实现,如果这对您的特定用途有用。