设计关系数据库 - 使用分层数据模型还是避免使用它们?
我正在设计一个数据库,我对在关系数据库中使用分层数据模型有一些疑问。
如果我想处理类别、子类别和父类别,可以不在关系数据库中使用分层数据模型吗?换句话说,是否可以使用关系方式处理类别、子类别和父类别?
顺便说一句,我正在使用 PostgreSQL。
抱歉我的英语不好。
此致,
I'm designing a Database and I have some doubts on using Hierarchical datamodels in relational databases.
If I want to deal with categories, subcategories and parent categories it is possible not to use a Hierarchical datamodels in a relational database? By another words, it is possible to deal with categories, subcategories and parent categories using the relational way of doing things?
By the way, I'm using PostgreSQL.
Sorry for my bad english.
Best Regards,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您有几个选项来存储层次结构:
如果您有 PostgreSQL 版本 8.4 或更高版本,则可以使用 隐性查询 让事情变得非常简单。这是迄今为止最简单的解决方案,易于查询,易于插入新记录,易于更新当前记录,易于删除记录并且具有引用完整性。所有其他解决方案都有难以解决的部分。
邻接列表:
结果:
You have a couple of options to store hierachies:
If you have PostgreSQL version 8.4 or later, you can use recusive queries to make things very easy. This is by far the easiest solution, easy to query, easy to insert new records, easy to update current records, easy to delete records and you have referential integrity. All other solutions have parts that are hard to solve.
Adjency list:
Result:
如果您使用 Postgres,则可以将层次结构作为具体化路径存储在数组中。
您还可以从这种方法的 GIN 索引中受益,在我的实验中,这种方法比递归查询具有更好的性能。
If you're using Postgres, you can store the hierarchy in an array as a materialized path.
You also benefit from GIN indexing with this approach, which in my experiments has had better performance than a recursive query.
“分层数据模型”是什么意思?如果您只是指在关系数据库或 SQL 数据库中建模层次结构,那么这是一件非常常见且合理的事情。有大量关于如何对层次结构进行关系建模的数据库文献。这样做没有什么“非关系性”的。
然而,术语“分层数据模型”通常指的是一种“DBMS 类型”(不是 RDBMS 或 SQL DBMS)。分层/网络/图形 DBMS 的运行原理与 RDBMS 不同 - 它们使用导航或基于指针的模型,而不是关系模型。关系/SQL 模型在很大程度上(但不是完全)取代了这种类型的 DBMS。除非您碰巧使用分层类型的 DBMS,否则您无需担心它。
What do you mean by "hierarchical data model"? If you just mean modelling a hierarchy in a relational or SQL database then that's a perfectly common and reasonable thing to do. There is a significant quantity of database literature on the subject of how to model hierarchies relationally. There is nothing "non relational" about doing that.
However, the term Hierarchical Data Model more usually refers to a type of DBMS (not an RDBMS or SQL DBMS). Hierarchical / Network / Graph DBMSs operate on different principles to RDBMSs - they use navigational or pointer-based models rather than the relational model. The relational / SQL model has largely (but not entirely) superseded that type of DBMS. Unless you happen to be using a hierarchical type of DBMS then you don't need to worry about it.