我有一个MongoDB作为许多独立的SQL数据库和API的整合中间层运行。
这些SQL数据库共享类似的Article表,但结构不同。鉴于一篇文章将属于多个类别和子类别,不超过4层。
原来我们有2个架构设计。
if($this->input->post('user_name') != $original_value) {
$is_unique = '|is_unique[users.user_name]'
} else {
$is_unique = ''
}
$this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean'.$is_unique);
和
{
categories: [...]
}
所以问题是,哪一个在性能和可维护性方面更好。
答案 0 :(得分:1)
标题问题的答案(最好将孩子放在数组或字段中)几乎总是取决于你的背景。
在你的情况下,看起来我们不是在谈论儿童,而是关于分层分类,有基类,然后是子类,等等,分为四个级别。我觉得很难证明将它存储为数组是正确的,因为数组会暗示所有成员大致同样有价值,除了它们的排序。正如@Thilo在评论中指出的那样,字段结构也使查询和索引更容易。
但是,从我的观点来看,使用字段的最重要的好处是你明确了每个数据点的含义。如果一年后另一个开发人员查看categories
数组,他们可能会假设他们正在处理一组标签,并且会错过分类的分层结构。另一方面,如果开发人员查看一组字段,每个类别一个字段,正确命名,他们将有更好的机会了解您的意图。
答案 1 :(得分:0)
这将是最好的结构
{
categories: [
{category:xxx, type:L1},
{category:xxx, type:L2},
{category:xxx, type:L3},
{category:xxx, type:L4}
]
}
而不是
{
categoryL1: xxx,
categoryL2: xxx,
categoryL3: xxx,
categoryL4: xxx
}
如果您有多个类别,最好在数组中进行分组。
使用第二个示例添加新类别需要您修改结构,这不是一个好方法。