文档型数据库设计模式
在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系。在传统的关系型数据库中,就已经产生了各种解决方案。 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型数据库作为存储的几种设计模式。 A.关系型
在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系。在传统的关系型数据库中,就已经产生了各种解决方案。 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型数据库作为存储的几种设计模式。 上图表示了传统的设计方法之一,就是将树形结构的每一个结点作为关系型数据库中的一行进行存储,每一个结点保存一个其父结点的指针。A.关系型数据库设计模式1
id
name
parent_id
1
A
NULL
2
B
1
3
C
1
4
D
2
优点:结构简单易懂,插入修改操作都很简单
缺点:如果要获取某个结点的所有子结点,将是一件很恶心的事
上图在模式1的基础上多了两列,left和right,相当于btree中的左右分支,分别存储了左右分支结点的最大值和最小值。B.关系型数据库设计模式2
id
name
parent_id
left
right
1
A
NULL
1
8
2
B
1
2
5
3
C
1
6
7
4
D
2
3
4
优点:要查找一个结点的子结点很容易,只需要做一个范围查询就行了(比如B节点的子结点,只需要查询 id >=2 && id
缺点:由于树结构存在在这里面了,所以添加或修改已存在结点将可能产生连锁反应,操作过于复杂
C.文档型数据库设计模式1
<span>{</span>
<span>"name"</span><span>:</span> <span>"A"</span><span>,</span>
<span>"children"</span><span>:</span> <span>[</span>
<span>{</span><span>"name"</span><span>:</span> <span>"B"</span><span>,</span> <span>"children"</span><span>:</span> <span>[</span><span>{</span><span>"name"</span><span>:</span> <span>"D"</span><span>}</span><span>]</span><span>}</span><span>,</span>
<span>{</span><span>"name"</span><span>:</span> <span>"C"</span><span>}</span>
<span>]</span>
将整个树结构存成一个文档,文档结构既树型结构,简明易懂。
优点:简明易懂
缺点:文档会越来越大,对所有结点的修改都集中到这一个文档中,并发操作受限
D.文档型数据库设计模式2
<span>{</span><span>"_id"</span><span>:</span> <span>"A"</span><span>,</span> <span>"children"</span><span>:</span> <span>[</span><span>"B"</span><span>,</span> <span>"C"</span><span>]</span><span>}</span>
<span>{</span><span>"_id"</span><span>:</span> <span>"B"</span><span>,</span> <span>"children"</span><span>:</span> <span>[</span><span>"D"</span><span>]</span><span>}</span>
<span>{</span><span>"_id"</span><span>:</span> <span>"C"</span><span>}</span>
<span>{</span><span>"_id"</span><span>:</span> <span>"D"</span><span>}</span>
优点:结构简单,查找子结点方便
缺点:查找父结点会比较麻烦
E.文档型数据库设计模式3
<span>{</span>
<span>"leaf"</span><span>:</span> <span>"A"</span><span>,</span>
<span>"children"</span><span>:</span> <span>[</span>
<span>{</span><span>"leaf"</span><span>:</span> <span>"B"</span><span>,</span> <span>"children"</span><span>:</span> <span>[</span><span>{</span><span>"leaf"</span><span>:</span> <span>"D"</span><span>}</span><span>]</span> <span>}</span><span>,</span>
<span>{</span><span>"leaf"</span><span>:</span> <span>"C"</span><span>}</span>
<span>]</span>
<span>}</span>
<span>{</span><span>"_id"</span><span>:</span> <span>"A"</span><span>,</span> ...<span>}</span>
<span>{</span><span>"_id"</span><span>:</span> <span>"B"</span><span>,</span> ...<span>}</span>
<span>{</span><span>"_id"</span><span>:</span> <span>"C"</span><span>,</span> ...<span>}</span>
<span>{</span><span>"_id"</span><span>:</span> <span>"D"</span><span>,</span> ...<span>}</span>
优点:操作方便,结构上的操作可以直接操作大的树形文档,数据上的操作也只需要操作单条数据
缺点:对所有结点的修改都集中到这一个文档中,并发操作受限
Modeling a Tree in a Document Databas

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











Apple's latest releases of iOS18, iPadOS18 and macOS Sequoia systems have added an important feature to the Photos application, designed to help users easily recover photos and videos lost or damaged due to various reasons. The new feature introduces an album called "Recovered" in the Tools section of the Photos app that will automatically appear when a user has pictures or videos on their device that are not part of their photo library. The emergence of the "Recovered" album provides a solution for photos and videos lost due to database corruption, the camera application not saving to the photo library correctly, or a third-party application managing the photo library. Users only need a few simple steps

Last week, amid the internal wave of resignations and external criticism, OpenAI was plagued by internal and external troubles: - The infringement of the widow sister sparked global heated discussions - Employees signing "overlord clauses" were exposed one after another - Netizens listed Ultraman's "seven deadly sins" Rumors refuting: According to leaked information and documents obtained by Vox, OpenAI’s senior leadership, including Altman, was well aware of these equity recovery provisions and signed off on them. In addition, there is a serious and urgent issue facing OpenAI - AI safety. The recent departures of five security-related employees, including two of its most prominent employees, and the dissolution of the "Super Alignment" team have once again put OpenAI's security issues in the spotlight. Fortune magazine reported that OpenA

To handle database connection errors in PHP, you can use the following steps: Use mysqli_connect_errno() to obtain the error code. Use mysqli_connect_error() to get the error message. By capturing and logging these error messages, database connection issues can be easily identified and resolved, ensuring the smooth running of your application.

How to use MySQLi to establish a database connection in PHP: Include MySQLi extension (require_once) Create connection function (functionconnect_to_db) Call connection function ($conn=connect_to_db()) Execute query ($result=$conn->query()) Close connection ( $conn->close())

70B model, 1000 tokens can be generated in seconds, which translates into nearly 4000 characters! The researchers fine-tuned Llama3 and introduced an acceleration algorithm. Compared with the native version, the speed is 13 times faster! Not only is it fast, its performance on code rewriting tasks even surpasses GPT-4o. This achievement comes from anysphere, the team behind the popular AI programming artifact Cursor, and OpenAI also participated in the investment. You must know that on Groq, a well-known fast inference acceleration framework, the inference speed of 70BLlama3 is only more than 300 tokens per second. With the speed of Cursor, it can be said that it achieves near-instant complete code file editing. Some people call it a good guy, if you put Curs

According to news on June 26, at the opening ceremony of the 2024 World Mobile Communications Conference Shanghai (MWC Shanghai), China Mobile Chairman Yang Jie delivered a speech. He said that currently, human society is entering the fourth industrial revolution, which is dominated by information and deeply integrated with information and energy, that is, the "digital intelligence revolution", and the formation of new productive forces is accelerating. Yang Jie believes that from the "mechanization revolution" driven by steam engines, to the "electrification revolution" driven by electricity, internal combustion engines, etc., to the "information revolution" driven by computers and the Internet, each round of industrial revolution is based on "information and "Energy" is the main line, bringing productivity development

JSON data can be saved into a MySQL database by using the gjson library or the json.Unmarshal function. The gjson library provides convenience methods to parse JSON fields, and the json.Unmarshal function requires a target type pointer to unmarshal JSON data. Both methods require preparing SQL statements and performing insert operations to persist the data into the database.

Using the database callback function in Golang can achieve: executing custom code after the specified database operation is completed. Add custom behavior through separate functions without writing additional code. Callback functions are available for insert, update, delete, and query operations. You must use the sql.Exec, sql.QueryRow, or sql.Query function to use the callback function.
