2

第一次发帖,请善待。

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

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

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

我正在考虑使用类似标签的东西,但添加标签类别,并在组织级别定义标签类别。因此,基本的表结构将类似于:

表:OrgTagCategory
字段:OrgId、TagCategoryId、CategoryTitle

表:OrgTag
字段:OrgId、TagCategoryId、TagId、TagTitle

表:OrgItemTag
字段:OrgId、ItemId、TagId

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

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

4

3 回答 3

1

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

这是我的做法:

  • 表:组织标签

    字段:组织 ID、标签 ID

  • 表:标签

    字段:TagId、TagTitle

  • 表:ItemTag

    字段:ItemId、TagId

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

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

于 2009-11-11T02:38:12.990 回答
1

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

-组织个人用户的类型。Usertable 具有所有用户共有的列,而OrganizationPerson表具有特定于每个用户的列。 -可以在多个站点(仓库)找到
库存项目(小部件类);一个网站存放许多物品
- 一件物品属于一个用户;一个用户可以拥有许多物品
-测量特征是观察的类型。测量是一种数字观察,就像高度一样。特征是一种描述性观察,就像颜色一样。
-观察属于特定类型(身高、体重、颜色),可以有许多相同类型的观察。 - 一个项目(小部件类)可以有很多观察,一个
观察只涉及一项
-用户可以更喜欢显示许多观察结果许多用户可能更喜欢(显示)观察结果更新我们可以通过标记观察类型 来简化用户对项目详细信息(观察)的订阅,例如高度、重量、宽度将标记为:所有、尺寸、物理。其他一些标签将是:accounting_interest、tracking_specific 等。然后用户将只订阅标签。标签(可以)形成一个层次结构,其中 ALL 在顶部。- 一种观察类型

orgspecific_model_01




(身高、体重、颜色)可以有很多标签,一个标签属于多种观察类型
- 每个标签可能有一个父标签,形成一个层次结构。
-用户存储她通常监控的一组标签的偏好。更新 2 现在我们可以弄清楚谁是谁,谁拥有什么。在此修改中,用户(现在是个人)可以为多个组织工作(拥有多个兼职工作或合同)。项目属于组织_

orgspecific_model_01A


现在。登录用户可以查看她工作的所有组织的所有项目。

orgspecific_model_01B

于 2009-11-11T15:41:17.123 回答
0

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

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

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

于 2009-11-11T05:42:10.903 回答