相同 2 table 之间的一对一和一对多关系
One-to-One and One-to-Many relation between same 2 table
我正在设计 Db,它有 2 tables
- 订单项table
- 价格Table
每个行项目可以是 Lot 或 Unit 类型
批次是一组具有相同价格的行项目。所以有很多订单项到一个价格关系
并且有 Unit Line 项目,其中每个项目都有不同的价格(所以有一个 - 一个关系)
所以现在,我有 2 个 table,它们之间有两种关系
price(unit) 1 to 1 行项目
Price(lot) 1 到多个 Line Item
我们开发了如下设计
LineItemTable(Id,PriceIdfk...)
和
Price(Id,Type,CostPrice)
此处输入是Unit还是Lot
但并不完全限制上述关系
例如:LineItem Table 下面有 3 行
(1, LotA, 31)
(2, LotA, 31)
(3, Unit, 32)
和价格 table 将有以下 2 条记录
(31,Lot,100$)
(32,Unit, 13$)
想象一下,将行项目的 PriceIdFk 从 31 更改为 32,因此属于同一批次的 2 个项目将具有不同的价格,这是不应该发生的。
我试过创建单独的主 table 作为 LineItemType(Id,Type)
它只有 2 条记录 (1,Unit)
和 (2,Lot)
并在 PriceTable
中引用此 Id 多一列 LineItemTypeFk
,但这并没有太大区别,因为属于同一批次的 2 件商品可能有不同的价格。
我想我以错误的方式识别实体,但我找不到适合这种情况的任何解决方案。
-- Item ITM is priced at PRI dollars.
--
item {ITM, PRI}
PK {ITM}
-- All items in group GRP
-- are priced at PRG dollars.
--
_group {GRP, PRG}
PK {GRP}
-- Item ITM is member of group GRP.
--
item_group {ITM, GRP}
PK {ITM}
FK1 {ITM} REFERENCES item {ITM}
FK2 {GRP} REFERENCES _group {GRP}
如果某个项目是组的成员,
然后适用团体价格;否则适用商品价格。
-- Item ITM is priced at PRICE dollars.
--
CREATE VIEW item_price
AS
SELECT i.ITM
, coalesce (g.PRG, i.PRI) AS PRICE
FROM item AS i
LEFT JOIN item_group AS x ON x.ITM = i.ITM
LEFT JOIN _group AS g ON g.GRP = x.GRP ;
备注
All attributes (columns) NOT NULL
PK = Primary Key
FK = Foreign Key
选项 2
根据下面的评论,将 GRP
保留在 item
。
-- All items in group GRP
-- are priced at group-price of PRG dollars.
--
_group {GRP, PRG}
PK {GRP}
-- Sample data
--
(GRP, PRG)
----------
(G00, -1) -- special group, individual item price applies
(G01, 120)
(G02, 150)
-- Item ITM, from group GRP, is priced at
-- individual item price of PRI dollars.
--
item {ITM, GRP, PRI}
PK {ITM}
如果商品是组 G00 的成员,则应用商品价格,否则应用组价格。
-- Item ITM is priced at PRICE dollars.
--
CREATE VIEW item_price
AS
SELECT i.ITM
, CASE WHEN i.GRP = 'G00' THEN i.PRI
ELSE g.PRG
END AS PRICE
FROM item AS i
JOIN _group AS g ON g.GRP = i.GRP ;
我正在设计 Db,它有 2 tables
- 订单项table
- 价格Table
每个行项目可以是 Lot 或 Unit 类型 批次是一组具有相同价格的行项目。所以有很多订单项到一个价格关系 并且有 Unit Line 项目,其中每个项目都有不同的价格(所以有一个 - 一个关系)
所以现在,我有 2 个 table,它们之间有两种关系 price(unit) 1 to 1 行项目 Price(lot) 1 到多个 Line Item
我们开发了如下设计
LineItemTable(Id,PriceIdfk...)
和
Price(Id,Type,CostPrice)
此处输入是Unit还是Lot
但并不完全限制上述关系
例如:LineItem Table 下面有 3 行
(1, LotA, 31)
(2, LotA, 31)
(3, Unit, 32)
和价格 table 将有以下 2 条记录
(31,Lot,100$)
(32,Unit, 13$)
想象一下,将行项目的 PriceIdFk 从 31 更改为 32,因此属于同一批次的 2 个项目将具有不同的价格,这是不应该发生的。
我试过创建单独的主 table 作为 LineItemType(Id,Type)
它只有 2 条记录 (1,Unit)
和 (2,Lot)
并在 PriceTable
中引用此 Id 多一列 LineItemTypeFk
,但这并没有太大区别,因为属于同一批次的 2 件商品可能有不同的价格。
我想我以错误的方式识别实体,但我找不到适合这种情况的任何解决方案。
-- Item ITM is priced at PRI dollars.
--
item {ITM, PRI}
PK {ITM}
-- All items in group GRP
-- are priced at PRG dollars.
--
_group {GRP, PRG}
PK {GRP}
-- Item ITM is member of group GRP.
--
item_group {ITM, GRP}
PK {ITM}
FK1 {ITM} REFERENCES item {ITM}
FK2 {GRP} REFERENCES _group {GRP}
如果某个项目是组的成员, 然后适用团体价格;否则适用商品价格。
-- Item ITM is priced at PRICE dollars.
--
CREATE VIEW item_price
AS
SELECT i.ITM
, coalesce (g.PRG, i.PRI) AS PRICE
FROM item AS i
LEFT JOIN item_group AS x ON x.ITM = i.ITM
LEFT JOIN _group AS g ON g.GRP = x.GRP ;
备注
All attributes (columns) NOT NULL
PK = Primary Key
FK = Foreign Key
选项 2
根据下面的评论,将 GRP
保留在 item
。
-- All items in group GRP
-- are priced at group-price of PRG dollars.
--
_group {GRP, PRG}
PK {GRP}
-- Sample data
--
(GRP, PRG)
----------
(G00, -1) -- special group, individual item price applies
(G01, 120)
(G02, 150)
-- Item ITM, from group GRP, is priced at
-- individual item price of PRI dollars.
--
item {ITM, GRP, PRI}
PK {ITM}
如果商品是组 G00 的成员,则应用商品价格,否则应用组价格。
-- Item ITM is priced at PRICE dollars.
--
CREATE VIEW item_price
AS
SELECT i.ITM
, CASE WHEN i.GRP = 'G00' THEN i.PRI
ELSE g.PRG
END AS PRICE
FROM item AS i
JOIN _group AS g ON g.GRP = i.GRP ;