支付方式概念和逻辑模型

Jan*_*sko 5 erd database-design best-practices

我需要根据以下要求创建停车场的概念和逻辑(规范化)模型。在我看来,它是一个非常简单的概念,不需要所有表都具有关系 - 但是它们不能被建模为实体。我试着在 stackoverflow 上问这个问题,但几天来没有得到任何反馈。

  1. 三种可能的付款方式:

    • 休假时支付的机票,
    • 带有现金信用的预付卡,
    • 带有“时间信用”的预付卡,
  2. 票价视时间而定:

    1. 1-2 小时 = 0 美元,
    2. 3 小时 = 2 美元,
    3. 4 小时 = 4 美元,
    4. 之后 x 小时 = $(x+1),但最大。24 小时 20 美元(……最容易将它们放到 24 行,对吗?)。
  3. 一张票 (a) 可以享受 20% 的折扣(即在商场购物)。

  4. 现金信用卡使用与门票相同的价格,但有 40% 的折扣。
  5. 现金信用卡可以重新充值。
  6. 计时卡支付一次,并允许在有效期间停车。

问题是我不知道如何将这些突出显示的关系放入逻辑数据库模型以及是否将它们放在那里。在设计中使用独立的表格是否可行?

Joe*_*own 1

在事务系统中,您需要记录事务发生时应用的值。

尝试使用关系将事务连接到依赖于日期的查找数据是错误的。原因是交易后发生的日期相关数据的更改将重述交易应该发生的情况。这会导致混乱和错误。

处理这种情况的方法是对支付交易中应用的实际值进行非规范化。您的模型没有反映这一点,但如果您为折扣和时间跨度费率命名了类别,则可以保持交易与类别名称之间的关系,同时仍然对实际(时间敏感)费率/百分比进行非规范化。


编辑:逻辑模型应该是什么样子?

在您的逻辑模型中,问题是您需要多个折扣(或价格)率,因为它们会随着时间的推移而变化,或者只是因为可能有多个规则,例如针对普通客户的一种价格和针对特殊客户的一种价格等。

缺少的是费率表的概念。这就像一个标头,然后附加了费率详细信息。您的模型中现在的内容实际上只是费率详细信息。您需要在交易和费率详细信息之间插入费率表标题。在您的逻辑模型中,关系是交易和费率表头之间的关系。这是可以的,因为费率表比随时间变化的细节更稳定。

在物理模型中,您仍然需要对交易中使用的实际汇率进行非规范化 制作时间点快照,因为这是确保编辑汇率不会重述历史记录的唯一可靠方法。