数据库设计入门

时间:2015-03-25 16:59:42

标签: database denormalized

我刚刚开始尝试创建我的第一个数据库,而且我被卡住了。

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

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

2 个答案:

答案 0 :(得分:0)

如果您想跟踪客户从哪个供应商处购买的商品,请尝试使用加入表:

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,根据customerID列或供应商销售的任何内容获取任何客户的购买。如果您想更进一步,请在加入表中添加“ItemsPurchased”列。

答案 1 :(得分:0)

类似于Kalmino的答案,但更具体一点。

通常在此用例中,除了您的客户,供应商等之外,您还会有Orders表,而不是直接将customersupplier相关联。它可能看起来像这样:

        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

根据需要添加成本等列。现在,您可以查询由给定用户放置的订单,由给定供应商填写的订单,按日期等。基本上,当您发现自己需要跟踪尚未存在的额外内容时,您需要考虑不仅是关系,还有什么"对象"或"实体"那些东西代表,并在表格中定义它们。