首页 > 解决方案 > 如何建模no-sql

问题描述

这是 RDBM 方法:

我有一个人员列表,因此名为 Person 的表:

id
name
country_id

然后我有一个国家表,名为 Country:

id
name

然后我插入以下行:

insert into country values(1, 'Macedonia'); 
insert into country values(2, 'England');   
insert into person values(1, 'Mirko', 1);   
insert into person values(2, 'Paul', 2);    

然后听说国家“马其顿”改名为“北马其顿”

在 RDBM 中,我显然会这样做:

update country set name = 'North Macedonia' where id = 1;

那么,no-sql 是如何解决这个问题的呢?我猜有一个名为“Person”的文档可能有这样的结构:

{person_name: 'Mirko', country_name: 'Macedonia'}       
{person_name: 'Paul', country_name: 'England'}      

当我需要将“马其顿”更改为“北马其顿”时,我是否将所有出现的“马其顿”更新为“北马其顿”?这是最佳做法吗?因为我猜在 no-sql 中你不应该有个人文件和国家文件。我对吗?

标签: mongodbnosql

解决方案


那么,no-sql 是如何解决这个问题的呢?我猜有一个名为“Person”的文档可能有这样的结构:

>     {person_name: 'Mirko', country_name: 'Macedonia'}       
>     {person_name: 'Paul', country_name: 'England'}

一个国家和一个人之间的关系是一对多(1-N)。

但是,这是一对多关系的特例。通常,“多”方可以有 100 或 1000 个文档。在这个国家和其中的人的情况下,“多”的一面很可能是数百万甚至数亿。

因此,在这种情况下,唯一可用的表示是从“多”端引用关系“一”端的文档;那是从“人”中引用“国家”。

文件可能是这样的:

人:

_id
name
age
country_id: <refers to country collection's _id>

国家:

_id: <country's unique identifier>
country_name
total_population


当我需要将“马其顿”更改为“北马其顿”时,我是否将所有出现的“马其顿”更新为“北马其顿”?这是最佳做法吗?因为我猜在 no-sql 中你不应该有个人文件和国家文件。我对吗?

要更改国家/地区名称,您只需使用更改后的国家/地区名称更新国家/地区集合的文档。

注意:这种情况特定于一对多关系,其中多方具有非常大的数量(通常称为一对多或一对多)。另外,请注意,当“多”方的文档数量较少(在 1-N 关系中)时,设计会有所不同。


推荐阅读