首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当项可以在多个类中时保持一致性

当项可以在多个类中时保持一致性
EN

Software Engineering用户
提问于 2016-10-29 14:09:37
回答 2查看 109关注 0票数 2

我很难把一件物品和课堂正确地联系起来。

例如,我有一个商业目录网站,根据他们提供的产品/服务显示不同公司的概况。例如,LG公司生产智能手机、电视、搅拌机等。

我希望公司相应地出现在每个类别上,并且每个父类别显示它持有电子公司( 243 )有243家生产电子产品的公司的公司数量。

假设我有:

代码语言:javascript
复制
 1. Electronics (243)        
    - Computers (14)
    - Smartphones (8)        // one of the 8 is LG 
    - TVs (10)               // one of the 10 is LG
 2. Kitchen tools (120)
    - Blenders (4)
    - etc.

我希望父类显示. 独一无二的总数.里面的公司。如果LG公司生产电视和智能手机,那么母公司就会将一家公司计算两次,从而提供错误的信息。用户可能会认为在这个类别中有2家公司,而只有一家。

我怎样才能避免重复?

EN

回答 2

Software Engineering用户

发布于 2016-10-29 19:16:56

这看起来像是集合抽象数据类型集合抽象数据类型的工作

如果可以跨子类别检索每个公司,那么在迭代它们时,只需在一个集合结构中积累它们。那些已经被发现的将从结构中被丢弃。当完成时,问结构它的基数是什么(计数或长度)。

这种想法在许多语言中都得到了支持。你没有列出你的,但如果它还没有以某种形式存在的话,我会很惊讶。如果您发现您必须自己实现这个想法,那么这个想法已经有了很好的记录。

有些语言并不会自动向所有对象(查看java)提供所需的散列。如果您为此构造了自己的对象,请确保已经处理好了。但是,您很可能可以使用即使是java提供的带有散列的字符串。

至于它看上去不对,只需解释一下你给他们看的是什么:

部门(独特公司)

  1. 电子学(18)
    • 计算机(14)
    • 智能手机(8)
    • 电视(10)

  2. 厨房工具(12)
    • 搅拌机(4)
    • 等。
票数 1
EN

Software Engineering用户

发布于 2016-10-29 20:04:40

您的需求

  • 你有一个类别树
  • 你有公司;公司至少被分配到一个类别;它们可以被分配到几个类别。
  • 您希望计算分配给任何类别节点的公司,确保每个公司只被计数一次:
    • 对于叶类,您可以计算指定公司的确切数量。
    • 对于父类别,您必须考虑分配给类别本身的公司,以及分配给所有子类别的公司,确保不对任何公司进行两次计数。
    • 从数学上讲,在根类中将计算出公司的总数。

可能的解决方案

您的数据模型应表示公司和类别(节点)之间的直接关系。

然后,您需要构建这种关系的传递闭包

  • 对于一个叶节点,闭包集将包含所有直接相关的公司。
  • 对于父节点,闭包集将包含与该节点直接相关的所有公司以及其子节点闭包集中的所有公司。请注意,根据定义,在一组中,每个元素最多只出现一次;从技术上讲,您将在这里合并集合。

您可以遵循两种实际的实现方法:

  • 可以在OOP模型中实现这一点,方法是为每个节点构建一个闭包集容器。这取决于您是根据需要构建这个闭包集,还是每次添加新的关联时都维护它。
  • 您也可以使用闭包表在RDBMS中执行此操作。

为了达到你想要的目标,你只需要在每一个类别的关闭集合中计算公司。

附加读数

这里的许多文章都是关于节点级别的图或树中的传递闭包(也就是说,闭包包含在树中一个或多个移动到的所有节点)。您需要对其进行调整,将其放入闭包中,而不是节点本身,而是连接到每个节点的公司。

  • 图的传递闭包提供了C++和Java的代码示例。
  • 用于在SQL中浏览树的闭包表
  • 闭包表-无缝存储分层数据
  • 最简单(?)在SQL中执行基于树的查询的方法
票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/334895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档