Database design 数据库模式帮助多个产品和供应商

Database design 数据库模式帮助多个产品和供应商,database-design,data-modeling,Database Design,Data Modeling,我希望有人能帮助我搞乱我试图实现的数据库模式。它的基础是销售来自网络提供商的移动合同和网络插销。合同由多个分销商提前签订,这些分销商可能会或可能不会销售网络合同。每个分销商的价格也不同 Distributors Name Address Distributor 1 address1 Distributor2 address2 Networks Name Orange O2 Vodafone Tariffs Network

我希望有人能帮助我搞乱我试图实现的数据库模式。它的基础是销售来自网络提供商的移动合同和网络插销。合同由多个分销商提前签订,这些分销商可能会或可能不会销售网络合同。每个分销商的价格也不同

Distributors
Name                Address
Distributor 1       address1
Distributor2        address2

Networks
Name
Orange
O2
Vodafone

Tariffs
Network         Tariff          Minutes
Orange      Business 600        600 Mins
Orange      Business 100        100 Mins
O2          Everyday 100        200 Mins
O2          Everyday 100        100 Mins

Devices
Name        Make        
Apple       Iphone
Samsung     Galaxy

Bolt Ons
Network Description
Orange      Web 500mb
Orange      Unlimited Texts
O2          Web 250Mb
O2          Unlimited Texts

您正在正确的轨道上完成您的模式,因为您正在识别分销商和产品、分销商和定价之间的关系

我首先添加一个DistributorTariff表,它与分销商和关税都有关系。然后,寻找其他限制,如TariffPrice等,并在那里建立表格

如果你知道所有的关系规则,你就可以先把它写在纸上。如果你分享你的所有规则,我可以进一步帮助你的设计

关于您的模式

看起来不错。在这一阶段规范化数据库的过程中可能会出现额外的复杂性,这将为您以后省去很多麻烦。我将提出以下建议:

  • 标准化表名是否为复数。例如,您有单数“订单”,但有复数“产品”。我个人倾向于选择单数,但这是另一个时间的讨论
  • 将“ProductByDistributor”重命名为“DistributorProduct”(如果您这样做,可以使用复数形式)
  • 通过连接表名,我倾向于发现“OwnerItem”格式读起来更好。例如,“OrderProduct”与“ProductOrder”相对
  • 您可以删除“TariffOrders”和“ProductOrders”表。您需要添加一个“OrderPart”或“OrderItem”表来代替这些表。这将有外键链接到“订单”、“DistributorProduct”和“DistributorTariff”。这消除了收入份额、佣金和成本数据的重复
  • 更正“关税”一词的打字错误。这会让你将来烦恼的;o)

希望有帮助。我很乐意详细说明任何问题。

非常感谢您的回复,我已将问题更新为完整的业务规则。我开始添加链接表,如tariffPrice等,但是模式很快变得非常大,似乎不正确。这可能只是因为我已经仔细考虑了几天了。嗨,Ste,你有机会对此提出进一步的建议吗?嗨,我已经用我设计的方案更新了这个问题。你有5分钟的时间来建议,因为它对我来说太复杂了吗?是的,我现在有。你能把你的创建表脚本上传到某个地方吗? Order - Exactly 1 Distributor - Exactly 1 Network - Exactly 1 Tariff - 0 or more Devices - 0 or more Bolt Ons Distributor - 0 or more Orders - 1 or more Networks - 1 or more Tariffs o Unique Tariff Costs - 1 or more BoltOns o Unique Bolt on Cost - 1 or more Devices o Unique Device cost Network - 0 Orders - 0 or more Distributors - 1 or more Tariffs - 0 or more BoltOns - 0 or more Devices Tariffs - 0 or more Orders - 0 or more Distributors - Exactly 1 Network - 0 or more BoltOns - 0 Devices BoltOns - 0 or more Orders - 0 or more Distributors - Exactly 1 Network - 0 or more Tariffs - 0 or more Devices Devices - 0 or more Orders - 0 or more Distributors - 0 or more Networks - 0 Tariffs - 1 or more BoltOns
[Distributors] 
    [Dist_ID] PK
    [Name],
    [Address]

[Network]
    [Network_ID]  PK,
    [Name],

[Tarrif]
    [TariffID] PK
    [Name],
    [Minutes] ,
    [OtherMinutes] ,
    [Texts] ,
    [Data],
    [Term] ,
    [Active] BIT,

[TariffsByDistributor] 
    [TariffsDistributorID] PK
    [DistID]    FK
    [TariffID]  FK
    [RevShare],
    [Commision],
    [Cost],
    [Active]

[Product_Type] 
    [Product_Type_ID]  PK,
    [Name],
    [Details],

[TariffsByNetwork]
    [Network_ID]  PK,
    [TariffID]    PK,

[Order] (
    [Order_Id]      PK,
    [Customer_Id],
    [Date Sold],
    [PaymentStatus],
    [PaymentStatusDate],

[TariffOrders] (
    [Order_Id]          PK,
    [TariffsDistributorID]  PK,
    [RevenueShare],
    [Commision],
    [Cost],

[Products] (
    [Product_Id]    PK
    [Product_Type_ID] FK,
    [Name],
    [Manufacturer],
    [Colour] 
    [Picture],
    [Active] BIT,

[ProductByDistributor]
    [ProductsByDistributorID] PK,
    [Dist_ID]    FK,
    [Product_Id] FK,
    [RevShare],
    [Commision],
    [Cost],
    [Active],

[ProductsOrder] 
    [Order_Id]          PK,
    [ProductsByDistributorID]   PK,
    [RevenueShare],
    [Commision],
    [Cost],

[Products_Network] 
    [Network_ID]    PK,
    [Product_Id]    PK,