Database design 数据模型设计与领域模型设计

Database design 数据模型设计与领域模型设计,database-design,oop,model,domain-driven-design,Database Design,Oop,Model,Domain Driven Design,我正试图模拟一家杂货店。商店里有几个“过道”。每个“过道”都有一组它存储的“物品”的“类别”。每个“类别”只能属于一个“通道”。每个“项目”只能有一个“类别” 在我看来,数据模型很简单: 带有ID和说明的“过道”桌子 “类别”表,带有ID、名称和参考“过道”表的过道ID 带有ID、名称、说明和引用“CATEGORY”的CATEGORY\u ID的“item”表 对象模型是我需要帮助的地方: 过道对象可以包含类别和项目对象的列表 过道对象可以具有类别对象列表。类别对象中可以有项目对象列表 过道

我正试图模拟一家杂货店。商店里有几个“过道”。每个“过道”都有一组它存储的“物品”的“类别”。每个“类别”只能属于一个“通道”。每个“项目”只能有一个“类别”

在我看来,数据模型很简单:

  • 带有ID和说明的“过道”桌子
  • “类别”表,带有ID、名称和参考“过道”表的过道ID
  • 带有ID、名称、说明和引用“CATEGORY”的CATEGORY\u ID的“item”表
对象模型是我需要帮助的地方:

  • 过道对象可以包含类别和项目对象的列表
  • 过道对象可以具有类别对象列表。类别对象中可以有项目对象列表
  • 过道可以有项目对象列表。类别对象可以有项目对象列表
  • 在每种情况下,项在逻辑上都有一个Category对象。我对每个域对象都有一个DAO,因此根据它的完成方式,sql会有一些变化。有什么想法吗?

    我投票支持选择2。比#1或#3更有意义

    你认为这种关系需要是双向的吗?一件物品是否需要知道它的父类别和祖父母通道是谁?

    我会选择2


    过道的主要问题是它包含哪些类别。应由Category类确定哪些项是成员。这使得每个对象的抽象层次保持一致——其中,通道是更高层次的对象,类别是更详细的层次,项目是最细粒度的

    如果这是你仅有的3个选择,那么第2个最有意义

    我想,如果我要创建这个模型,我会使用以下模型(稍加修改,只是尽量保持与您的想法接近):

    过道对象可以有类别对象列表,类别对象可以有项目对象列表,并且项目与类别和过道关联。

    我的修改似乎更多的是在数据方面

    我之所以会这么做,是因为有人说“嘿,我在找这个特殊的商品,它在哪一个通道?”——1查找会给你答案。而对于数据模型,则需要进行2次查找


    至少我是这么想的。

    @duffymo这是个很好的问题。现在,我的模型支持类别和项目之间的双向关系。它变得有点古怪,因为它将形成一个循环关系:我可能只需要包含“浅”关系,其中一个项目有一个类别,但该类别只填充了它的ID和名称,而不是所有属于该类别的项目。你觉得怎么样?@dj:那肯定是#2,因为那样你就可以有一个空列表的类别。“inverse=false”打破了Hibernate观点的循环。@duffymo当我从persistence加载数据时,整个结构是否应该存在?例如,加载过道对象时,其中包含的所有类别是否都包含该类别中包含的所有项目?取决于您所谈论的数量。如果这个数字成了问题,我会说他们是懒惰抓取的候选者。只要从持久层获取您需要的内容。@Sev我同意您的看法。我的评论与我对达菲莫的评论大致相同,因为保持一种“肤浅”的关系可能更有意义,即合成对象不包含任何进一步的合成对象。几乎每个岛上都有糖果条和小报。这是一个更准确的杂货店模型吗?