#sql-server #tsql
#sql-сервер #tsql
Вопрос:
Я извлекаю информацию из базы данных с помощью представлений. В вышеупомянутых представлениях мне нужен другой уровень, который отвечает за сбор информации из представлений.
Представления довольно большие и содержат в основном одни и те же типы информации (есть несколько флагов, которые отвечают за выбор правильного типа информации для определенного уровня).
Визуализируйте, например, различные слои в товарах. Вы получаете поддон (вид3) товаров, каждый товар упакован в футляр (вид2), в этом футляре содержится x товаров, а товары являются базовым слоем (вид1).
Пример:
View1(single item) View2 (multiple items) View3 (all items)
10 cols 8 cols 4 cols
Что особенного в моих представлениях, так это то, что большинство столбцов имеют одно и то же имя во всех трех представлениях. Таким образом, столбец с именем «Name» будет одинаковым в View1, View2 и View3, но разные физические уровни различаются по объему информации, извлекаемой из каждого из них.
Должен ли я просто отказаться от этого и поместить все в одно представление, а затем выбрать флаги оттуда?
Предполагается, что sql, отвечающий за извлечение информации из представлений, является хранимой процедурой. Вы вводите идентификатор и код региона, и вам будут представлены все различные слои для элемента.
Комментарии:
1. Большинство столбцов с одинаковыми именами не совпадают со всеми.
Ответ №1:
Вы на самом деле не предоставили достаточно данных о
- Как создаются 3 представления (т. Е. Из чего и где они выбираются)
- Как хранятся данные базовой таблицы
Но это похоже на довольно стандартную 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