【问题标题】:Database schema help muliple products and suppliers数据库模式帮助多个产品和供应商
【发布时间】:2012-05-02 02:55:23
【问题描述】:

我希望有人可以帮助我解决我正在尝试实现的数据库模式。它基于销售移动合同和网络提供商的网络连接。合同由一些可能会或可能不会出售网络合同的分销商预先填写,价格也因分销商而异。

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
命令 - 正好 1 个经销商 - 正好 1 个网络 - 正好 1 关税 - 0 个或更多设备 - 0个或更多螺栓 经销商 - 0 个或更多订单 - 1 个或多个网络 - 1 个或多个关税 o 独特的关税成本 - 1 个或多个螺栓 o独特的成本螺栓 - 1 个或多个设备 o 唯一设备成本 网络 - 0 个订单 - 0 个或更多经销商 - 1 个或多个关税 - 0 个或多个 BoltOns - 0 个或更多设备 关税 - 0 个或更多订单 - 0 个或更多经销商 - 正好 1 个网络 - 0 个或多个 BoltOns - 0 台设备 螺栓 - 0 个或更多订单 - 0 个或更多经销商 - 正好 1 个网络 - 0 个或多个关税 - 0 个或更多设备 设备 - 0 个或更多订单 - 0 个或更多经销商 - 0 个或更多网络 - 0 关税 - 1 个或多个螺栓

我想出了 2 个模式,但我真的不满意。主要是因为分销商可能无法提供来自网络的所有产品。关税、设备和配件的价格也因经销商而异。我希望对架构方法提出一些建议?

非常感谢

罗伯

编辑-------- 在我拥有的 cmets 之后,我想到了以下 shema。我添加了以下假设

Devices 和 Bolton 非常相似,可以放在产品表中:

我们需要运行的查询类型是根据用户在 6-12 个月前可能支付的费用生成发票 - 分销商的价格可能会每月变化。

每个分销商每个网络销售的手机数量等...

  • 各个分销商的关税相同,但每个分销商的价格和佣金会有所不同。

以下架构上有任何 cmets 吗?

[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,

【问题讨论】:

    标签: database-design data-modeling


    【解决方案1】:

    您正在完成架构的正确轨道,因为您正在确定分销商与产品、分销商与定价之间的关系。

    我首先添加一个 DistributorTariff 表,该表与 Distributor 和 Tariff 都有关系。然后,寻找其他限制,例如 TariffPrice 等,并在那里建立表格。

    如果您了解所有的关系规则,您就可以先将其写在纸上。如果您分享所有规则,我可以帮助您进一步设计。

    关于您的架构

    看起来不错。在这个阶段规范化你的数据库可能看起来额外的复杂性将在以后让你头疼。我会提出以下建议:

    • 标准化您的表名是否为复数。例如,您有单数“订单”但有复数“产品”。我个人的偏好是使用单数,但这是另一次讨论。
    • 将“ProductByDistributor”重命名为“DistributorProduct”(如果采用这种方式,则为复数)。
    • 对于连接表名,我倾向于发现“OwnerItem”格式读起来更好。例如,“OrderProduct”与“ProductOrder”相对。
    • 您可以去掉“TariffOrders”和“ProductOrders”表。代替这些,您需要添加一个“OrderPart”或“OrderItem”表。这将具有链接到“Order”、“DistributorProduct”和“DistributorTariff”的外键。这消除了收入分成、佣金和成本数据的重复。
    • 更正“关税”一词的拼写错误。以后会惹恼你的! ;o)

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

    【讨论】:

    • 非常感谢您的回复,我已使用完整的业务规则更新了问题。我开始添加链接表,例如关税价格等,但是架构很快变得非常大,而且看起来不正确。可能只是我想多了,因为我已经研究了几天了。
    • 嗨 Ste,您有机会就此提出任何进一步的建议吗?
    • 嗨,我已经用我设计的架构更新了这个问题,你有 5 分钟的时间来建议,因为这对我来说似乎过于复杂了吗?
    • 是的,我现在这样做。你能把你的创建表脚本上传到某个地方吗?
    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多