【问题标题】:How to model a list to different entities efficiently?如何有效地将列表建模到不同的实体?
【发布时间】:2014-08-21 22:41:22
【问题描述】:

给定以下模型:

CustomerType1(id, telephone, address)
CustomerType2(id, telephone, name)

OrderType1(id, timestamp, customerType1.id, comments, enum1)
OrderType2(id, timestamp, customerType2.id, comments)
OrderType3(id, timestamp, name)

我将如何建模以下内容?

OrderList(id, OrderType.id, ..)
OrderItem(OrderList.id, MenuItem.id)

A.我需要 3 种不同类型的 OrderList 来适应 orderTypes 吗?

OrderList1(id, OrderType1.id, ..)
OrderItem1(OrderList1.id, MenuItem.id)

OrderList2(id, OrderType2.id, ..)
OrderItem2(OrderList2.id, MenuItem.id)

OrderList3(id, OrderType3.id, ..)
OrderItem3(OrderList3.id, MenuItem.id)

或者

B. orderLists 和 OrderTypes 之间关系的 3 个定义会更好吗?

OrderList_Type1(orderList.id, orderType1.id)
OrderList_Type2(orderList.id, orderType2.id)
OrderList_Type3(orderList.id, orderType3.id)

这似乎是一种非常低效的数据存储方式,我只是觉得我对它的建模确实不正确(尽管它仍然有意义,但它可能不利于扩展/效率?)。有没有更好的方法来建模这个?

注意:给定的模型可以更改,但仍必须包含相同的信息。

【问题讨论】:

  • 您的问题不完整。您没有解释“MenuItem”,也没有描述您的要求。在我看来,您不应该对不同的客户类型和订单类型进行建模,而应该对 CustomerOrder 建模。订单通常由订单行组成,因此您通常需要OrderLine 类型/表格。你的“OrderList”可能是指ItemCatalog

标签: database database-design uml data-modeling database-management


【解决方案1】:

1。你的 UML 模型没问题

从 UML 类图的角度来看,您的模型和您要添加的 OrderListOrderItem 扩展是清晰明确的,我没有看到任何建模问题。

为了避免过度复制/粘贴,我只添加了 2 个名为 ...Base 的父类。常见的OOP建模技术

绘制为 UML 类图,您的模型如下所示:

2。对于物理实现,我会选择 B

至于这个模型的实现“模型”从你给的两个选择中((A) 很多复制/粘贴,(B) 不知何故normalize and minimize the schema)我会走下面绘制的(B)路径。

这就是我们公司的一个软件系统在关系语言中对类继承进行建模的方式,它工作得很好。

在我们的系统中,大部分必要的胶水代码都是自动生成的。主要是自动生成的OrderType2View,它自动连接父表OrderTypeBase中的相应字段并自动翻译所有DML操作,例如OrderType2OrderTypeBase 中的 insert as DML 操作会自动将正确的 OrderTypeClassId 字段添加到父表中的所有记录。这样就很容易区分哪个子表实际上包含记录的特定部分。

感谢生成器,我们可以轻松地使用其他父类扩展模型(继承层次结构和连接表的数量可以是任意深度),并且仍然允许一些旧代码将它们视为它们的一般父类 - 无需关心详情。

我不知道是否有更好的方法,考虑到 (A) 或 (B) 我会选择 (B) 因为它是一个有效的设计(我已经看到了:)

【讨论】:

猜你喜欢
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
相关资源
最近更新 更多