【问题标题】:How to make an database structure with handling multiple service in a Foreign Key?如何在外键中处理多个服务的数据库结构?
【发布时间】:2017-09-17 16:25:45
【问题描述】:

我正在制作一个需要购买许多服务的网站,我的问题是找到为这种结构制作 ERD 的最佳方法!

当我显示图像时,我有一个为用户制定合同的例行系统,换句话说,我有一个简单的表格来插入合同及其相关信息,供用户和成员使用。

我将合约表的所有关系存储在 Junction 表中。但我的问题是我有许多服务具有不同的价格,这些价格根据自己的情况计算(FirstServicePriceSecoundServicePrice **、**ThirthServicePrice 和...)。

我决定使用名为 JunctionForFindPrice 的联结来保持合同的每个服务主要。 4 示例如果有人购买了第一个服务,我只在 JunctionForFindPrice 表中的 FirstServicePriceId 字段中保留 FirstServicePrice ID,并将另一个字段留空,然后将 JunctionForFindPrice 的 Id 存储在 Junction 表中(图中的灰色表)。

这是实现该实施的最佳方式吗?这是正确的方法吗?

【问题讨论】:

  • Google stackoverflow 数据库/sql/table FK 带有子类型(也是多态性/层次结构)和重新表/列类型标签/变体。多个 FK 列通常是一种反模式。 Google re FK to many/multiple/2 tables & re multiple/many/2 Exclusive FKs。因此,这是一个常见问题解答。

标签: sql sql-server foreign-keys relational-database


【解决方案1】:

有多少应用程序就有多少定价模式,因为每个人的做法都略有不同,所以不用担心:我们都对如何以“正确”的方式做到这一点感到困惑。一种常见的方法是创建一个类似于 [Orders] 的表,其中包含 [ClientID]、[DateOrdered] 和 [OrderedBy] 等字段,以及另一个表 [OrderLineItems],其中包含它们添加到订单和价格的每个 [ServiceID]存储为数字的服务(23.99 美元)。在添加到 OrderLineItems 表时,您将拥有一个函数或存储过程来确定客户对该服务的价格,而不是价格连接表。

在我的主要应用程序中,我们为每个服务提供了一个“标准价格”表,其中包含开始/停止日期:这使我们能够设置未来的价格上涨。然后我们有一个可能的折扣表,它允许三种类型的折扣,设置新价格、x% 的折扣或 x$ 的折扣。如果我们想向客户收取更多费用,“折扣”可能是负数。这使得定价结构非常灵活,但要弄清楚这一切的代码非常复杂和脆弱。

【讨论】:

  • 感谢您的回答。这是个好主意!但是否推荐分离价目表并在我的 orderLineItem 中插入最终计算的价格?你能告诉我一个使用这个解决方案的 ERD 吗?
  • 是的,我会推荐它,因为当时的价格现在已在该发票上永垂不朽。否则,如果您的价格模型发生变化并且您需要回顾(例如重新创建发票),您需要确保您提取的价格是当时的正确价格,以及批量折扣、优惠券的任何调整,首次用户积分等。我会看看我周围是否有 ERD...
  • 非常感谢... :)
猜你喜欢
  • 1970-01-01
  • 2021-07-21
  • 2021-10-20
  • 1970-01-01
  • 2015-12-21
  • 2014-08-18
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多