LEADERSOFT.ru Разработка на заказ программ и сайтов
ЕСЛИ БАЗА ВАМ НУЖНА В ЛИДЕРСОФТ ЗАЙДИ СПЕРВА!
Список всех статей ... Подписка на новости (рассылка через subscribe.ru)




































Выпуск 44. Техническое задание. Часть 4.

Подписка: "Access 2000 - программирование и готовые решения"
Тема:  "Техническое задание"
Часть: "Структура базы данных"
Дата: 31.12.2003 
Сайтhttp://www.leadersoft.ru (Перепечатка в любом виде запрещена)
Брошюра: Техническое задание (полное описание в формате Microsoft Word)
Введение. В этом выпуске дается описание структуры базы данных.
Новости
    31.12.2003. Поздравляю всех с наступающим Новым годом. Желаю успехов, счастья, прекрасного настроения и исполнения всех желаний.
    17.12.2003. Вышла новая новая программа "Мастер Интернет торговли". Данная программа предназначена для создания собственного торгового бизнеса в Интернете. "Мастер Интернет торговли" использует базу данных Access и может легко настраиваться менеджером. Программа позволяет создавать магазины для внутреннего использования корпоративными клиентами и для внешнего использования в интернете. Для построения магазинов используются готовые Access шаблоны баз данных и html страниц. Примеры работы магазинов, созданных мастером, можно посмотреть на сайте: www.mostorg.com. Есть платная и бесплатная версии программы. Для правильной работы программы необходимо установить Microsoft Office c базой данных Access. Ссылки на программу: общий вид, описание, загрузка.

Техническое задание

 Введение

   После того, как мы определили источники информации (1 часть) и общую концепцию базы данных (2 часть), а также разработали файловую систему программы (3 часть) можно приступить к внутреннему описанию таблиц и полей базы данных. 
   P.S. Тем, кому трудно понять описание технического задания по базе данных, необходимо скачать программу "Мастер Интернет торговли" (ссылки указаны выше) и изучить структуру любого магазина, созданного мастером. Это даст возможность более детально понять методику проектирования базы данных, излагаемую в этом описании.

 Структура главного файла базы данных

    Главным файлом базы данных в Интернете назначим файл webshop.mdb. Он должен состоять из нескольких таблиц и доступ к нему будет организован через скрипты. Таблицы в файле обозначим префиксом webGood (интернет товар). Эти таблицы должны отличаться по названию от внутренней базы данных компании, т.к. в Интернете цены и номенклатура товаров будет отличаться от корпоративной базы данных. При разработке описания будем учитывать и тот факт, что таблицы могут быть изменены в результате проектирования магазина. Описание таблиц и ее полей дадим на английском языке.
 • webGoodData - главная таблица с описанием товаров интернет магазина.
 • webGoodGroups - подчиненная таблица-справочник с информацией о группировке товаров
 • webGoodTypes - подчиненная таблица-справочник с информацией о типе товаров.
 • webGoodPropertiesList - подчиненная таблица-справочник с информацией о списке свойств товаров
 • webGoodProperties - подчиненная таблица-справочник с информацией о свойствах товаров
 • webGoodPropertiesGroups - подчиненная таблица-справочник с информацией о группировке свойств
 • webGoodCurrency - подчиненная таблица-справочник с описанием валют.
 • webGoodUnit - подчиненная таблица-справочник с описанием единиц измерения товара.
В таблицах будут встречать специальные поля, начинающиеся с id (префикс), это будет означать, что в поле храниться специальное числовое значение. Использование таких полей позволяет сократить размеры базы данных. Например, если указать в таблице не "Доллар США", а его идентификатор 840, то при числе записей 20000 мы будем экономить примерно 120Кб информации.

 Таблица webGoodData

   Данная таблица хранит информацию о продаваемых товарах через интернет магазин. В скобках даны примеры заполнения полей в таблице. Для того чтобы можно было просматривать идентификаторы для них создаются списки из двух полей. В первом поле указывается код, а во втором отображаемое значение.
• idGood - уникальный идентификатор товара (836). Поле не редактируется.
• Code - код товара, присвоенный бухгалтерией для учета товара (1001104).
• Good - название товара (Лодка TENDER 220)
• Price - цена товара (1 050,00)
• idCurrency - идентификатор валюты (840, USD)
• idUnit - идентификатор единицы измерения (2, Шт.)
• idGroup - идентификатор группы (148, Лодки надувные Lomac)
• idType - идентификатор подгруппы (43, Tender Series (Rollup))
• Description - описание товара (Самый маленький класс разборных (Rollup) лодок для прибрежных прогулок с возможностью установки маломощных двигателей.)
• ImageMax - максимальное изображение товара на отдельной странице (220SerieTender.jpg)
• ImageMin - минимальное изображение в каталоге (220SerieTender_small.jpg)
• Артикул - артикул товара, специальное обозначение производителя. Может иметь текстовое или число вое значение (100415)
• idОператор - код оператора добавившего или изменившего товар в базе данных. (3, Сидорова Алла)

 Таблица webGoodGroups

Данная таблица хранит информацию по группам товаров. Группировка товаров делается в том случае, чтобы обеспечить удобный поиск нужного товара, т.к. их в базе данных может быть очень много.
• idGroup - максимальное изображение товара на отдельной странице (148)
• Group - минимальное изображение в каталоге (148, Лодки надувные Lomac)
• Fields - список основных свойств товара, которые будут выводиться в каталоге ([Общая длина (см)],[Вес лодки (кг)])

 Таблица webGoodTypes

Данная таблица хранит информацию по типам (подгруппам) товаров. Примерное описание таблицы дано ниже.
• idType - максимальное изображение товара на отдельной странице (473)
• idGroup - максимальное изображение товара на отдельной странице (148, Лодки надувные Lomac)
• type - минимальное изображение в каталоге (43, Tender Series (Rollup))

 Таблица webGoodPropertiesList

Данная таблица предназначена для определения свойств товаров. Эти свойства нужны для определения данных по товару и отображению их на странице. Это могут быть высота, ширина, толщина, масса и другие параметры. Примерные поля указаны ниже.
• idProperty - идентификатор свойства (5)
• idGroup - идентификатор группы (2, Лодки)
• Property - название свойства (длина)
• idUnit - идентификатор единицы измерения (2, шт.)
• idPropertyGroup - идентификатор группировки свойств (2, Двигатель)

 Таблица webGoodProperties

В предыдущей таблице мы определили свойства товаров. Теперь эти свойства нужно привязать к определенному товару. Это делается через данную таблицу. Пример таблицы по свойствам указан ниже.
• idGood - идентификатор группировки (2)
• idProperty - идентификатор свойства (2)
• Value - значение свойства (Двигатель)

 Таблица webGoodPropertiesGroups

Для некоторых товаров, которые имеют много свойств желательно определить группировку. Эта группировка проявляется не в каталоге, а в карточке товара (html файл). Отображая такую страницу, мы будем видеть свойства товара разбитые на группы или части. Например, габариты будет означать, что в этом разделе указаны ширина, высота и длина товара.
• idPropertyGroup - идентификатор группировки (2)
• PropertyGroup - название группы на страницы товаров (Габариты)

 Таблица webGoodCurrency

Предположим, что в нашем магазине будут храниться не только товары, в рублевом измерении, но и в других валютах, например, долларах, евро и т.п. Если ввести описание валюты непосредственно в главную таблицу, то скорость ее работы будет не очень высокой, т.к. текстовые поля требуют больше памяти для обработки. В этом случае, для улучшения скорости работы с базой данных в главную таблицу добавляют вместо описания валюты ее идентификатор . Таблица валют будет иметь следующий вид:
• idCurrency - идентификатор валюты, равен коду валюты в ЦБ (840)
• Currency - короткое описание (USD)
• Description - подробное описание (Доллар США)

 Таблица webGoodUnit

Каждому товару в магазине соответствует единица измерения, например, штуки, килограммы, сантиметры и т.п. Для хранения этой информации необходимо разработать таблицу для сохранения текстовой информации по этому параметру. Пример полей таблицы.
• idUnit - идентификатор единицы измерения (2)
• Unit - короткое описание (шт.)
• Description - подробное описание ([штука])
Таким образом, мы описали главный файл базы данных и теперь можно приступить к созданию скриптов базы данных. Эта информация будет дана позднее. Продолжение следует ...

Ответы на вопросы
Вопрос 3182. Имеется текстовое поле содержащее некий код, например, (1.1.1, 1.1.2, 1.2.1, 1.2.2, и т.д.).  Необходимо найти сумму записей по другому полю таблицы number c кодами например 1.1.1 и 1.1.2 и результат кинуть в поле 1.1, 1.2.1 и 1.2.2 - результат в 1.2. 
После просуммировать 1.1.и 1.2 и результат кинуть  в 1. А также вывести значения сумм 1.1.1,1.1.2 и т.д.  Как наиболее эффективно реализовать такую группировку?
  Ответ.
1. Вариант. Создание запроса на группировку. SELECT Left([Code],3) AS Code1, Sum(Table1.Value) AS Value1 FROM Table1 GROUP BY Left([Code],3);
2. Вариант. Использование DSum("[Value]";"[Table1]";"Left([Code],3)='1.1'") в запросе.
3. Вариант. Такие поля хорошо сортируются. Можно написать специальную функцию в VBA, которая будет вычислять результат построчно, используя команду split для разбора строк.
P.S. Обсудить тему можно по сcылке: Обсуждение
Вопрос 3180. Импортирую данные из базы ACCESS в EXCEL на листе создал кнопку и привязал такой код 

Sub Кнопка3_Щелкнуть() 
Dim string_Path As String 
Dim string_sql As String 
string_Path = Worksheets("Планы").Range("G1").Value 
string_sql = "select * from DictAgent" 
Workbooks.OpenDatabase Filename:=string_Path + "RGSDATA.MDB", _ 
CommandText:=string_sql, _ 
CommandType:=xlCmdSql 
End Sub 

Все работает кроме одной малости :( создаваемая выборка уходит в новую книгу, а хочется на тот-же лист где и кнопка запуска
  Ответ. Непонятно, почему работает код в Excel, т.к. для объекта Workbooks нет функции OpenDatabase (возможно это другая версия базы). С другой стороны, если требуется на текущую страницу вставить запрос из Access, используя кнопку, то это можно сделать с помощью мастеров (они и подскажут какой лист выбрать). Примерный порядок действий.
1. Открываете меню: "Сервис-Макрос-Начать запись"
2. Далее используете меню "Данные - Внешние данные - Создать запрос". Выполняете нужные действия по запросу и сохраняете макрос.
3. Создаете кнопку и привязываете к ней макрос предварительно отредактировав его. Пример такого макроса, который вставляет таблицу курсов валют на текущий лист Excel, указан ниже.
Sub Макрос5()
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=База данных MS Access;DBQ=E:\data\ServerData.mdb;DefaultDir=E:\data;DriverId=" _
), Array("25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;")), Destination:= _
ActiveCell)
.CommandText = Array( _
"SELECT `ВАЛЮТА описание`.Валюта, `ВАЛЮТА описание`.Код" & Chr(13) & "" & Chr(10) & "FROM `ВАЛЮТА описание` `ВАЛЮТА описание`" _
)
.Name = "Запрос из База данных MS Access"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub
P.S. Обсудить тему можно по сcылке: Обсуждение
Вопрос 3029.  Есть база клиентов. Поля: ОргФорма, Наименование и в т.ч. e-mail. Только у некоторых из клиентов есть адрес эл. почты. ЗАДАЧА. Создание кнопки радом с полем [E-mail], с тем, чтобы при нажатии вызывался, установленный по умолчанию, почтовый клиент, создавалось новое письмо, в котором подставлялся эл. адрес из поля [E-mail] и в теме подставлялось значение поля [ФИО].
  Ответ. Общий механизм отсылки сообщения по email такой: DoCmd.SendObject , , , "test@mail.ru", , , "Title", "Text", True. Остается только подставить в этот код нужные поля и можно отсылать сообщение. Пример реализации для кнопки butEmail.
Private Sub butEmail_Click()
    DoCmd.SendObject , , , Me.email, , , Me.FIO, "Контакт", True
End Sub
P.S. Неплохо бы еще и сделать так, чтобы эта кнопка активизировалась только при наличии данных в поле email. Для этого надо использовать событие "Текущая запись" формы и "Обновление" поля email.
Обсудить тему можно по сcылке: Обсуждение