【问题标题】:Getting started on database design数据库设计入门
【发布时间】:2015-03-25 16:59:42
【问题描述】:

我刚刚开始尝试创建我的第一个数据库,但我遇到了困难。

我有多个每月购买的客户(m-m 关系)。我有多个每月销售的供应商(m-m 关系)。每个客户都可以从多个供应商处购买,每个供应商都可以向多个客户销售(m-m 关系)。

我如何将它们连接在一起?

【问题讨论】:

  • 做了一些英文更正。添加标签。

标签: database denormalized


【解决方案1】:

如果您想跟踪客户从哪个供应商那里购买了什么,请尝试使用连接表:

CREATE TABLE CustomerPurchases
(
    id int not null identity(1,1)
    ,customerID INT NOT NULL
    ,supplierID INT NOT NULL
    --make customerID a foreign key of Customers and supplierID a foreign key of supplier
)

现在,每次客户购买商品时,都会在连接表中插入一条记录。从那里,您可以根据 customerID 列获取任何客户的购买,或根据供应商 ID 获取供应商出售的任何东西。如果您想更进一步,请将“ItemsPurchased”列添加到联接表中。

【讨论】:

    【解决方案2】:

    类似于 Kalmino 的回答,但更具体一些。

    通常在此用例中,除了您的客户、供应商等之外,您还将拥有一个 Orders 表,而不是将 customer 直接链接到 supplier。它可能看起来像这样:

            CREATE TABLE Orders
            (
                id INT NOT NULL IDENTITY(1,1),
                CustomerID INT NOT NULL,
                SupplierID INT NOT NULL,
                OrderDate DATE NOT NULL,
                OrderQuantity INT NOT NULL,
                ProductID INT NOT NULL
            ), 
    -- example of a foreign key definition, do this for Customers also
        CONSTRAINT FK_SupplierID_Suppliers FOREIGN KEY (SupplierID)
        REFERENCES Suppliers (id)
    

    或者可能是主从形式:

     CREATE TABLE OrderHeader
        (
            OrderID INT NOT NULL IDENTITY(1,1),
            CustomerID INT NOT NULL,
            OrderDate DATE NOT NULL,
            ShipDate DATE NOT NULL
        )
    
        CREATE TABLE OrderDetail
        (
            OrderID INT NOT NULL,
            OrderQuantity INT NOT NULL,
            ProductID INT NOT NULL,
            SupplierID INT NOT NULL
        )
    -- FK definitions and stuff
    

    根据需要添加成本等列。现在,您可以查询给定用户下的订单、给定供应商填写的订单、按日期等。基本上,当您发现自己需要跟踪尚不存在的额外事物时,您不仅需要考虑关系,但这些事物代表什么“对象”或“实体”,并在表格中定义它们。

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 2014-07-16
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      相关资源
      最近更新 更多