我正在建立一个用于开具发票订单的数据库。我们有不同的工作,我们的产品价格不同。当我输入新工作时,我希望它链接到我们的默认价格,并且只能针对该客户进行修改。我们有100多种产品,只有某些产品的每项工作的价格有所调整,因此会默认加载。
答案 0 :(得分:0)
这需要在客户和产品之间建立m到n的关系,这由保存客户特定价格的联结表实现。假设您有一个以Customer
作为主键的表CustomerID
和一个以Product
作为主键的表ProductID
,则新表如下所示:
Table CustomerPrice
-------------------
CustomerID Number/Long, no default value, required
ProductID Number/Long, no default value, required
Price Number/Decimal, Scale 2, no default value, required
主键必须是复合键(CustomerID
,ProductID
)。这样可以确保每种产品只能有一个特定于客户的价格。
使用删除级联在Customer.CustomerID
和CustomerPrice.CustomerID
之间以及使用删除级联在Product.ProductID
和CustomerPrice.ProductID
之间添加关系。 (您可以在用户界面中完成所有操作。)
默认价格将直接存储在Product
表中。
您可以选择这样的产品价格
SELECT x.CustomerID, x.CustomerName, x.ProductID, x.ProductName, Nz(cp.Price, x.Price) AS Price
FROM
(SELECT c.CustomerID, c.Name AS CustomerName, p.ProductID, p.Name AS ProductName, p.Price
FROM Customer c, Product p) x
LEFT JOIN CustomerPrice AS cp ON x.ProductID = cp.ProductID AND x.CustomerID = cp.CustomerID;
这会产生可用的客户特定价格,否则会生成默认产品价格。
如果您需要特定客户或产品的数据,请将WHERE子句添加到嵌套的SELECT
SELECT x.CustomerID, x.CustomerName, x.ProductID, x.ProductName, Nz(cp.Price, x.Price) AS Price
FROM
(SELECT c.CustomerID, c.Name AS CustomerName, p.ProductID, p.Name AS ProductName, p.Price
FROM Customer c, Product p
WHERE c.CustomerID = 7 AND p.ProductID = 10) x
LEFT JOIN CustomerPrice AS cp ON x.ProductID = cp.ProductID AND x.CustomerID = cp.CustomerID;