我使用视图从数据库中提取信息。在前面提到的视图中,我需要有另一个层来负责从视图中选择信息。
视图非常大,并且其中大部分信息类型相同(有一些标志负责为特定图层选择正确类型的信息)。
可视化例如商品中的不同层。你得到一个托盘(view3)的项目,每个项目都包装在一个案例(view2),这个案子包含x项目,项目是基础层(view1)。
示例:
View1(single item) View2 (multiple items) View3 (all items)
10 cols 8 cols 4 cols
我的观点的特别之处在于,大多数列在所有三个视图中都具有相同的名称。所以一个名为" Name"在View1,View2和View3中会是相同的,但不同的物理层在每个物理层中提取的信息量不同。
我应该废弃它,并将所有内容放在一个视图中,然后从那里选择标志吗?
负责从视图中提取信息的sql应该是一个存储过程。您输入了id和区域代码,并显示了该项目的所有不同图层。
答案 0 :(得分:0)
您还没有真正提供有关
的足够数据但这似乎是一个非常标准的1:N:M
关系结构,但我会考虑这样的数据结构。
<强>表格强>
Items Cases Pallets
------------------------- ------------------- ----------------------
Id INT PK NOT NULL +------> Id INT PK NOT NULL +--> Id INT PK NOT NULL
ItemCode NVARCHAR(50) | CaseBarCode NVARCHAR(50) | PalletBarCode NVARCHAR(50)
ItemName NVARCHAR(50) | PalletId FK to Pallets --+
CaseID FK To Cases ------+
使用这种类型的表数据结构,写入多个视图以查看来自
的数据应该是微不足道的项目视角
CREATE VIEW ItemView
AS
BEGIN
SELECT * FROM Items
END
案例透视
CREATE VIEW CaseView
AS
BEGIN
SELECT c.CaseBarCode
,Count(i.Id) As NumItems
FROM Items i JOIN Cases c ON i.CaseId = c.Id
GROUP BY c.CaseBarCode
END
托盘视角
CREATE VIEW PalletView
AS
BEGIN
SELECT p.PalletBarCode
,Count(c.Id) As NumCases
FROM Cases c JOIN Pallets p on c.PalletId = p.Id
GROUP BY p.PalletBarCode
END