Sql 如何在一个外键中创建一个处理多个服务的数据库结构?

Sql 如何在一个外键中创建一个处理多个服务的数据库结构?,sql,sql-server,foreign-keys,relational-database,Sql,Sql Server,Foreign Keys,Relational Database,我正在做一个网站,有很多服务要买,我的问题是找到最好的方法,使这个结构的ERD 当我展示一张图片时,我有一个为用户制作合同的常规系统,换句话说,我有一个简单的表,可以为用户和成员插入合同及其相关信息 我将契约表的所有关系存储在连接表中。但我的问题是,我有许多服务,它们的价格根据其自身情况计算不同(FirstServicePrice、SecondServicePrice**、**ThirthServicePrice和……) 我决定使用一个名为JunctionForFindPrice的连接来保留合同

我正在做一个网站,有很多服务要买,我的问题是找到最好的方法,使这个结构的ERD

当我展示一张图片时,我有一个为用户制作合同的常规系统,换句话说,我有一个简单的表,可以为用户和成员插入合同及其相关信息

我将契约表的所有关系存储在连接表中。但我的问题是,我有许多服务,它们的价格根据其自身情况计算不同(FirstServicePriceSecondServicePrice**、**ThirthServicePrice和……)

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

这是实现此功能的最佳方式吗?这是正确的方法吗?


定价模式和应用程序一样多,因为每个人的做法都有点不同,所以不要担心:我们都被如何以“正确”的方式做到这一点弄糊涂了。一种常见的方法是创建一个类似于[Orders]的表,其中包含[ClientID]、[DateOrdered]和[OrderedBy]等字段,以及另一个表[OrderLineItems],其中包含他们添加到订单中的每个[ServiceID],以及以数字形式存储的服务价格($23.99)。您可以使用一个函数或存储过程来代替价格连接表,该函数或存储过程在将该服务添加到OrderLineItems表时确定该服务的客户机价格

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

Google stackoverflow数据库/sql/带有子类型的表FK(也包括多态性/继承性)&表/列类型标记/变量。多个FK列通常是反模式。Google将FK重设为多个/多个/2表&重设多个/多个/2独占FK。因此,这是一个常见问题。谢谢你的回答。好主意!但是,是否建议将价目表分开,并在我的orderLineItem中仅插入最终计算价格?你能给我看一个使用这种解决方案的ERD吗?是的,我推荐它,因为当时的价格已经在发票上永久化了。否则,如果您的价格模型发生变化,您需要回过头来看(比如重新创建发票),您需要确保您提取的价格是当时的正确价格,以及批量折扣、优惠券、首次用户信用等的任何调整。我会看看是否有ERD……非常感谢……:)