我刚刚开始尝试创建我的第一个数据库,但我被卡住了。
我有多个每月购买的客户(mm 关系)。我有多个每月销售的供应商(mm 关系)。每个客户都可以从多个供应商处购买,每个供应商都可以向多个客户销售(mm 关系)。
我如何将它们连接在一起?
我刚刚开始尝试创建我的第一个数据库,但我被卡住了。
我有多个每月购买的客户(mm 关系)。我有多个每月销售的供应商(mm 关系)。每个客户都可以从多个供应商处购买,每个供应商都可以向多个客户销售(mm 关系)。
我如何将它们连接在一起?
如果您想跟踪客户从哪个供应商那里购买了什么,请尝试使用连接表:
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”列添加到联接表中。
类似于 Kalmino 的答案,但更具体一点。
Orders
通常在这个用例中,除了您的客户、供应商等之外,您还会有一个表,而不是将 acustomer
直接链接到 a 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
根据需要添加成本等列。现在,您可以查询给定用户下的订单、给定供应商填写的订单、按日期等。基本上,当您发现自己需要跟踪尚不存在的额外事物时,您不仅需要考虑关系,但这些事物代表什么“对象”或“实体”,并在表格中定义它们。