0

给定以下模型:

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. 为了适应 orderTypes,我需要 3 种不同类型的 OrderLists 吗?

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)

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

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

4

1 回答 1

0

1.你的UML模型没问题

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

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

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

在此处输入图像描述

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

至于从您给出的两个选择中该模型的实现“模型”((A)许多复制/粘贴,(B)以某种方式规范化和最小化架构)我会走下面绘制的(B)路径。

这就是我们公司的软件系统之一如何在关系语言中对类继承进行建模,并且效果很好。

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

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

在此处输入图像描述

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

于 2014-08-23T17:14:42.903 回答