Выбор из нескольких представлений

#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