【问题标题】:How to setup organization specific data elements about shared items?如何设置有关共享项目的组织特定数据元素?
【发布时间】:2009-11-11 02:25:54
【问题描述】:

第一次发帖,请多多关照。

注意:我已经查看了条目 #20856(如何实现标记),但由于我正在考虑的标记方法在我的应用程序中是特定于组织的,我觉得这有所不同。我希望有人能确认我要去的方向或指出其他一些选择。

(背景)我们正在构建一个 Web 应用程序,让不同的组织可以看到他们在不同位置的库存。该数据库存储用户、组织、站点和项目,并且有从站点和项目到组织的链接,允许我们确定向哪些用户显示哪些项目/站点(基于他们的组织)。

两个(或更多)组织希望使用门户来检查(例如)洛杉矶仓库中小部件 A 的库存状态是很常见的。那部分很好。但是,不同的组织也会跟踪有关小部件 A 的唯一信息。例如,组织 1 想要跟踪每个项目的颜色、数量和主要供应商。组织 2 想要跟踪每个项目的颜色、库存类型、库存周期、买方代码。我想避免这样一种情况,即我必须在一个表中加载所有这些可能的字段,然后找出哪些组织使用哪些字段。

我正在考虑使用类似标签的东西,但添加标签类别,并在组织级别定义标签类别。所以,基本的表结构是这样的:

表:OrgTagCategory
字段:OrgId、TagCategoryId、CategoryTitle

表:组织标签
字段:OrgId、TagCategoryId、TagId、TagTitle

表:OrgItemTag
字段:OrgId、ItemId、TagId

然后,当用户登录主仪表板时,网格会将其相应的项目字段作为列包含在网格中。因此,从上面的示例中,组织 1 将看到项目编号、描述(将显示为所有)、颜色、数量和主要供应商。组织 2 将显示项目编号、描述、颜色、库存类型、库存周期、买方代码。

我是不是想太多了,或者有没有我想念的更简单的方法?衷心感谢所有想法/反馈。

【问题讨论】:

    标签: database tags tagging


    【解决方案1】:

    这应该没问题,但是您正在冗余存储OrgId。此外,标签和组织之间似乎可能存在一些重叠(实际上可能有很多重叠)。

    我会这样做:

    • 表:组织标签

      字段:OrgId、TagId

    • 表格:标签

      字段:TagId、TagTitle

    • 表:ItemTag

      字段:ItemId、TagId

    这样每个组织都与它感兴趣的标签相关联,但您没有多余的标签。多个组织使用的给定标签只会在 OrgTag 中获得一堆行,而不是在具有相同 TagTitle 的 Tag 中获得多行。

    如果每个组织有多个标签类别,您只需要一个表 OrgTagCategory。但是您没有将这种额外的关联描述为一项要求。

    【讨论】:

    • 感谢您指出冗余比尔。不错的清洁解决方案。
    【解决方案2】:

    根据您的描述,我绘制了一个简化模型并将其与 observation pattern 结合起来。这应该使您能够跟踪各种项目属性和查看它们的用户偏好。诚然,Preference 表可能会变大,但数据无论如何都必须存储在某个地方,您可以使用 sql 检索它,从而简化业务层。

    - 组织用户的类型。 User 表具有所有 用户 共有的列,而 OrganizationPerson 表具有各自特定的列。
    - 可以在多个站点(仓库)找到库存item(小部件类); 网站存储许多项目
    - 一个item属于一个用户用户可以拥有许多物品
    - Measurementtrait 是观察的类型。 测量是一种数值观察,例如高度。 特征是一种描述性观察,如颜色。
    - 观察结果属于特定的类型(身高、体重、颜色),可以有许多相同的观察结果 >类型。
    - 一个item(小部件类)可以有多个observations,一个observation只与一个item相关.
    - 用户可以喜欢显示许多观察结果;许多用户可能首选(显示)观察



    更新
    我们可以通过标记观察类型来简化用户对项目详细信息(观察)的订阅,例如高度、重量、宽度将标记为:所有、尺寸、物理。其他一些标签将是:accounting_interest、tracking_specific 等。然后用户将只订阅标签。标签(可以)形成一个层次结构,顶部为 ALL。

    - 一个观察类型(高度、重量、颜色)可以有多个标签,一个标签属于许多观察类型
    - 每个标签可能有一个父标签形成一个层次结构。
    - 用户存储了她通常监控的一组标签首选项



    更新 2
    现在我们可以分清谁是谁,谁拥有什么。在此修改中,用户(现在是个人)可以为多个组织(拥有多个兼职工作或合同)工作。 项目现在属于一个组织。登录用户可以查看她工作的所有组织的所有项目。

    【讨论】:

    • 虽然这个设计比我想象的要复杂一些,但我希望我也能接受它,因为对观察模式细节的有价值的参考,这对研究很有趣。谢谢达米尔。
    【解决方案3】:

    我对此的第一个快速想法是 - 如果这仅限于在仪表板上向特定组织“显示”特定字段,那么最好在应用程序端处理它。如果“标记”还有其他用法,请澄清。

    这是一个简单的方法 - 您可以在 Org 主表或 OrgItem 表中存储字段 [OrgDashboardFields]。这将是显示在仪表板上的以逗号 (',') 分隔的字段列表。在运行时获取 [OrgDashboardFields] 字段并解析应用程序中的逗号分隔列表,并使 Dashboard Grid 行为相应。

    或者,如果有一个动态查询框架,那么基于 [OrgDashboardFields] 字段,您可以创建一个动态 SQL 查询并获得完全特定于组织的所需结果。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2019-07-11
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多