Поддержка сайта

Высокие позиции в поисковой системе, на прямую зависят от развития вашего сайта.

Продвижение сайтов

Эффективность стратегий продвижения подтверждается сотрудничеством с крупными клиентами и отзывами о нашей работе.

Создание сайтов

Мы делаем сайты быстро, недорого и профессионально. От работы с нами, у вас останутся только положительные эмоции.

Представления

Представление (view) — это виртуальная таблица, обладающая всеми свойствами таблицы, но не содержащая никаких данных. Представление реализует заранее специфицированный план показа данных, который хранится в виде запроса к базе и позволяет управлять выводимой пользователю информацией. Представление имеет два неоспоримых преимущества. Во-первых, обеспечивается некоторая степень защиты доступа к базе данных, поскольку представление может одновременно содержать важную и не особо важную информацию в одной таблице, но пользователь получит только неконфиденциальные сведения. Например, в базе данных компании может присутствовать таблица с информацией о сотрудниках, включая имена, фамилии, адреса и результаты продаж. Фамилию, имя и адрес можно предоставить широкой публике через представление, но доступ к данным о продажах получат лишь несколько ответственных сотрудников отдела кадров.

Во-вторых, представление позволяет настроить выводимую пользователям информацию — оно может показать больше или меньше сведений в зависимости от конкретных требований.

Мы применим представления для комбинирования данных, которые в соответствии с требованиями реляционных баз данных хранятся в разных таблицах.

Начнем с создания представления vProducts, которое объединяет таблицы Products, Suppliers, Mfrs и Departments.

Создание представления vProducts

1. В левой панели Enterprise Manager щелкните правой кнопкой мыши на значке Views (с изображением очков), который находится ниже базы данных JoCoffee. Выполните New View…

2. В открывшемся окне щелкните правой кнопкой мыши на верхней серой панели и выберите команду Add Table… Вдиалоговом окне Add Table укажите добавляемые таблицы (Products, Suppliers, Mfrs и Departments) и щелкните на кнопке Add.

3. Все четыре таблицы попадут в серую панель. Закройте диалоговое окно Add Table. Разрешается перетаскивать таблицы внутри панели для их расположения в нужном порядке. Некоторые поля таблиц показаны полужирным шрифтом — это первичные ключи таблиц.

4. Щелчками мыши на строках свяжите таблицы так, как показано на рисунке. Чтобы связать таблицы, выделите связующий столбец и перетащите его на связываемый с ним столбец другой таблицы — в панели появится изображение связи между двумя столбцами (отмена связывания выполняется правым щелчком мыши на линии связи с последующим исполнением команды Remove).

5. Щелкните мышью па значке сохранения представления (в верхнем левом углу экрана) и в окне Save As укажите имя vProducts.

6. Теперь нужно разрешить конфликты имен, которые пока присутствуют в представлении. В каждой отдельной таблице идентификаторы типа Name и URL точно описывают содержащиеся в поле данные. Однако при объединении таблиц в представление каждый столбец должен иметь уникальное имя, поэтому нужно каким-то образом различать четыре названия Name и два имени URL.

Перед переименованием проверьте, что на экран выведена панель Grid Pane (возможно, потребуется нажать кнопку Show/Hide Grid Pane панели инструментов).

 Представления

7. Присвойте столбцам несовпадающие имена, отредактировав столбец Alias (псевдоним):

 Представления

Описание работы

Все наши действия транслируются в запросы SQL, которые можно увидеть в панели View Designer (если ее нет на экране, щелкните на кнопке Show/Hide SQL Pane панели инструментов).

Используемые для извлечения столбцов операторы SQL могут быть представлены следующим образом (порядок расположения столбцов зависит от порядка выполнения операций в упражнении):

 Представления

 

Хранение сведений о товарах:

Перейдем к созданию схемы, учитывая, что для хранения динамических атрибутов нам потребуется некоторая структура базы данных.

Бытуют два мнения по поводу построения систем, подобных нашей. В обоих случаях общие элементы хранятся в уже созданной таблице Products.

□ Метод А: создание еще одной табличной структуры для динамических данных.

□ Метод В: динамическое создание таблиц для каждого типа элементов.

Метод В обладает лучшей производительностью и гибкостью, но его реализация слишком сложна и выходит за рамки этой книги. Мы создадим еще один набор таблиц для динамических данных. Эти таблицы должны хранить:

□ Сведения о различных типах товаров в магазине Jo’s Coffee

□ Набор атрибутов для каждого типа товара

□ Значения атрибутов

Потребуется несколько представлений для извлечения этой информации и для поддержки обработки данных в "двигателе" проекта WroxCommerce.

Построение таблиц для хранения динамических атрибутов

1. Начнем с создания простой таблицы Types, которая описывает различные тины товаров, представленных в каталоге. Следуя обычной процедуре формирования таблицы в базе данных JoCof fee, введите имя Types и заполните таблицу, как показано на рисунке (первичный ключ — поле ТуреЮ):

 Представления

2. Пока нам нужен только один тип, поэтому введите в созданную таблицу указанные на рисунке значения (щелкните на таблице правой кнопкой мыши, укажите Open Table I Return all rows, введите Espresso Machines в поле Name; SQL Server сам заполнит поле TypelD):

 Представления

3. Теперь построим таблицу, отслеживающую наборы атрибутов для каждого типа товара. Создайте таблицу AttributeStructure следующей структуры (первичным ключом должно быть поле StructurelD):

 

 Представления

Представления

4. Заполните таблицу AttributeStructure сведениями о производителе и укажите набор атрибутов для типа товара Espresso Machines, который мы добавили в таблицу Types на шаге 2 этого упражнения.

Помните, что если при добавлении строки SQL Server выберет для TypelD значение не равное 1, это значение и следует указать в столбце.

5. Для хранения значений атрибутов товара создайте таблицу Attributes, в качестве первичного ключа выберите AttributelD:

 Представления

Поясним назначение столбцов таблицы:

□ AttributelD хранит уникальный идентификатор атрибута.

□ StructurelD ссылается на описание атрибута в таблице AttributeStructure.

□ ProductlD ссылается на общие атрибуты товара в таблице Products.

□ LongValue, StringValue, DoubleValue, DateValue иBooleanValue служат для хранения пяти различных наборов данных, присваиваемых атрибутам. Это позволяет наиболее эффективно хранить данные. Так, при записи длинного целого не придется преобразовывать его в строку и сохранять в поле Varchar, мы сразу запишем его в LongValue.

6. Для упрощения дальнейшей работы сформируем представление, обеспечивающее быстрый поиск атрибутов определенного товара. Используя обычную процедуру, создайте новое представление vAttributes, связывающее таблицы AttributeStructure и Attributes.

 Представления

7. Завершим работу внесением небольшого изменения в "двигатель" WroxCommerce, которое позволит идентифицировать пять типов данных, указанных для наших атрибутов (п. 3, 4 и 5). Для этого в среде Visual Basic вернитесь в проект WroxCommerce и создайте новый стандартный модуль (Standard Module) с именем Globals. Введите в него код:

 Представления

 

Описание работы

Таблица турез группирует атрибуты. Разные элементы каталога имеют разные наборы атрибутов. Кофеваркам "эспрессо" потребуется атрибут Сир Capacity (емкость в чашках), а кофейным зернам — Strength (крепость). Созданная таблица позволяет при добавлении наименования товара в каталог присвоить ему определенный тип, после чего мы будем знать не только общие атрибуты этого товара (таблица Products), но и присвоенные ему динамические атрибуты.

Затем создается таблица AttributeStructure, в которой каждая строка представляет собой один атрибут, идентифицируемый полем Type ID. Нужно знать не только имя каждого атрибута, но и порядок появления атрибутов в списке (Priority), а также тип данных, хранящихся в атрибуте (Datatype). Столбец Priority позволяет сформировать запрос

SELECT * FROM AttributeStructure ORDER BY Priority

для возврата набора атрибутов в правильном порядке. Мы использовали имя Priority (приоритет), поскольку слово Order (порядок) зарезервировано в T-SQL (диалект SQL для внутреннего применения в SQL. Server). Список зарезервированных слов приводится в интерактивном техническом описании (Books Online), которое устанавливается вместе с SQL Server.

Далее мы строим таблицу Attributes, которая используется в базе данных для хранения всех атрибутов всех товаров, представленных в каталоге. Мы уже отмечали, что реализовано не самое эффективное, но вполне работоспособное решение.

При описании представления vAttributes мы выделяем все строки, поэтому SQL Server выполняет внешнее (outer join), а не внутреннее соединение (inner join). Таким образом серверу SQL Server указывается, что нас интересует только один набор данных (таблица AttributeStructure), а данные в других таблицах являются дополнительными. Поэтому, когда SQL Server пытается связать строку Valve Туре из AttributeStructure со строкой таблицы Attributes, содержащей определенные значения атрибутов, происходит соединение этих строк, даже если в таблице Attributes нет специального набора значений для Valve Туре. В идеале, когда товары не имеют специфических атрибутов, не придется расширять таблицу Attributes и запросы будут обслуживаться быстрее.

В нашем примере имеются некоторые данные для товара с идентификатором 1. Поле ProductlD для Valve Туре содержит null-значение, показывающее, что для Valve Туре нет специальных значений в таблице атрибутов.

 Представления

Как и раньше, рассмотрим запрос SQL, формирующий представление:

 Представления

В конце упражнения создается код модуля Globals, который служит для идентификации разных типов данных, хранящихся в атрибутах. Объект ADO (и OLE DB) объявляет набор констант, идентифицирующих тип столбца у поставщика (источника данных) OLE DB, чтобы в дальнейшем запрашивать, получать и показывать атрибуты имеющихся типов данных. Использован собственный набор констант ADO/OLE DB, применимый к множеству различных типов данных (что перекрывает наши требования). Реализацию констант можно просмотреть в таблице AttributeStructure, где разные элементы поля Datatype соотносятся со списком типов данных кода Visual Basic, введенного в модуль Globals:

atString = О atLong = 1 atDouble = 2 atDate = З atBoolean = 4

Итак, мы построили часть структуры, соответствующую уровню данных и обеспечивающую хранение сведений о товарах. Перейдем к уровням бизнес-правил и представления, позволяющим манипулировать и отображать эти данные.

Читайте так же:
Not found

Нам доверяют

Интернет магазин