我想将数据存储在一个可以嵌套的数据库中,如
[
{
id: 'deadbeef',
url: 'https://lol.cat/1234',
revisions: [
{
id: '1',
title: 'foo',
authors: ['lol', 'cat'],
content: 'yadda yadda',
// ...
},
{
id: '2',
title: 'foo',
authors: ['lol', 'cat'],
content: 'yadda yadda bla',
// ...
},
// ...
]
},
// ...
](人们可以想象这里会有更多的水平。)
或者,可以将相同的数据组织成扁平的,如
[
{
documentId: 'deadbeef',
url: 'https://lol.cat/1234',
id: '1',
title: 'foo',
authors: ['lol', 'cat'],
content: 'yadda yadda',
// ...
},
{
documentId: 'deadbeef',
url: 'https://lol.cat/1234',
id: '2',
title: 'foo',
authors: ['lol', 'cat'],
content: 'yadda yadda bla',
// ...
},
// ...
]基本上只存储上述方法的叶子,以及属于它们的所有信息。
典型的请求将是:
deadbeef的所有修订版。caffee文档的修订版。这两种方法中的任何一种明显更好吗?这两种方法的优点/缺点是什么?
发布于 2015-12-01 22:56:39
第二个模式是第一个模式的非规范化版本。比较一种更关系的方法可能是有用的:
{
documents: [
{
id: 'deadbeef',
url: 'https://lol.cat/1234',
// ...
},
// ...
],
revisions: [
{
id: '1',
documentId: 'deadbeef'
title: 'foo',
authors: ['lol', 'cat'],
content: 'yadda yadda',
// ...
},
{
id: '2',
documentId: 'deadbeef',
title: 'foo',
authors: ['lol', 'cat'],
content: 'yadda yadda bla',
// ...
},
// ...
]
}嵌套方法遇到了一个称为访问路径依赖的问题。基本上,通过假设一个首选层次结构,它使得需要不同层次结构的查询更加困难。
非规范化版本可能会出现更新异常,这意味着部分更新会使数据库处于不一致的状态。
另一方面,关系方法不支持任何层次结构,因此支持即席查询,而规范化有助于消除更新异常。RDBMS还包含了许多完整性检查和约束,以确保数据的有效性。
https://stackoverflow.com/questions/34031289
复制相似问题