Таблица 2
Фирмы
Имя поля | Назначение |
Firm ID | Первичный ключ |
FName | ООО «Трионика» |
FAdress | Ул. Ленина 28 |
FCity | Екатеринбург |
FPhone | Тел: 8 (343) 210-10-10 |
FE-mail | Trionika.@.ru |
FPerson | Иванов Иван Иванович |
FFinDelta | Финальное сальдо |
FCngDelta | Обменное сальдо |
FCoeff | Скидка 10% |
FRetDays | 60 дней |
В таблице TOVAR разместим полные сведения о каждом виде товара, хотя бы раз купленного у какого либо поставщика или полученного по обмену от другого оптового поставщика (практика обмена товара между оптовыми поставщиками широко распространена за товар, полученный или переданный по обмену, не осуществляются платежи).
Таблица 3
Товар
Имя поля | Назначение |
TovarID | Первичный ключ |
TName | Паровой котел |
TMade | BoosterCoLTD |
TYear | 2006 |
TNumber | 5 |
TQuan | 5 |
TPrise | 70 000 |
TOpt | 77 000 |
TRozn | 85 000 |
В таблице NAKLS будет предназначена для хранения сведений о накладных. В ней будут поля, в которых система управления базами данных поместит дату отгрузки или получения товара, тип накладной (на покупку или продажу, с предоплатой или в рассрочку, с возвратом ранее проданного/купленного товара или передачей его по обмену), наименование партнера, общую сумму накладной.
Таблица 4
Накладные
Имя поля | Назначение |
NaklID | Первичный ключ |
NDate | 10.01.2007 |
NRetDate | 2 месяца |
NType | Тип накладной:0- покупка у поставщика;1- продажа покупателю;2- возврат поставщику;3- возврат от покупателя;4- товар, получаемый по обмену;5- товар передается по обмену;6- покупка с предоплатой;7- продажа с предоплатой. |
NFirm | Уникальный код партнера |
NCoeff | Скидка/наценка (10%) |
NSum | Сумма накладной (100 000) |
NPayedSum | Оплачиваемая сумма (50 000) |
NRetSum | Сумма возврата (0) |
Возникает вопрос: каким образом система управления базами данных будет хранить сведенья о получаемого или передаваемого по накладной товара? Ведь их состав и количество могут быть какими угодно: если осуществляется покупка оборудования у поставщика, в накладной обычно указывается лишь одно – два наименования, которые покупаются крупными партиями; если оборудование покупает магазин, он может закупить до сотни наименований не большими партиями; не исключена и розничная продажа одного единственного наименования товара покупателю. Ясно, что в таблице NAKLS, как и в любой другой таблице базы данных, не может быть переменного количества полей, поэтому сведения о связанном с накладн6ой товаре будут храниться в отдельной таблице MOVETOVAR: в ее полях укажем ссылку на соответствующую накладную, наименование и количество переданного – полученного оборудования.
Таблица5
Передвижение товара
Имя поля | Назначение |
MoveID | Первичный ключ |
MNakl | Код накладной |
MTovar | Код товара |
MQuan | 5 |
MPrise | 77 000 т.р. |
Наконец, в таблицу PAYMENTS поместим сведения о платежах: кто, кому и сколько платит.
Таблица 6
Сведения о платежах
Имя поля | Назначение |
PayID | Первичный ключ |
PFirm | Код партнера |
POut | Направление платежаTrue – партнеруFalse – от партнера |
PDate | 10.01.2007 |
PSum | 77 000 т.р. |
Таким образом, таблица NAKLS будет центральной. Она должна иметь уникальное поле, которое будет однозначно определять каждую накладную. В дальнейшем, поэтому полю, мы создадим первичный ключ, что бы система управления базами данных могла быстро найти нужную накладную. Каждой записи в NAKLS будут соответствовать произвольное количество записей в таблице MOVETOVAR (такая связь в терминологии баз данных называется связью один ко многим). В этой таблице ссылка на главную таблицу NAKLS определяется тем, что одно из ее полей будут содержать уникальный идентификатор накладной. По этому полю следует создать индекс, чтобы система управления базами данных смогла быстро отыскать весь товар, связанной с той или иной накладной. В таблице NAKLSбудет также ссылка уникальный идентификатор партнера из таблицы FIRMS, в таблице MOVETOVAR – ссылка на уникальный идентификатор переданного – полученного товара (две последние связи называются связью один к одному). Таблица PAYMENTS имеет единственную связь с таблицей FIRMS. Однако при появление очередной записи в ней должны соответствующим образом измениться суммы платежей в таблице NAKLS и сольдо в таблицы FIRMS.
Перед созданием базы данных, на компьютере должен быть развернут и запущен сервер InterBase версии 6.0 или 7.0.
Поставляемый с Delphi сервер баз данных InterBase завоевал себе прочную репутацию как один из самых надежных и неприхотливых серверов. Высокая производительность, развитый механизм транзакций, возможность использования внешних функций – вот далеко не полный перечень его достоинств.
Вместе с тем у сервера InterBase есть серьезный недостаток. Он не оптимизирует страницы дисковой памяти, выделяемые для размещения записей, а по завершении транзакций не удаляет ее, а лишь помечает как удаленную. С течением времени (по умолчанию – через каждые 10000 транзакций) сервер автоматически убирает накопившийся «мусор» и перестраивает индексы, но до этого времени «дырчатая» структура памяти и не перестроенные индексы могут сильно снижать производительность сервера при работе с «грязной» базой данных, в особенности, если в ней используются громоздкие таблицы, содержащие сотни тысяч и миллионы записей. Мне известен реальный промышленный проект, в котором этот недостаток после нескольких лет эксплуатации системы управления базой данных послужил причиной ее радикальной перестройки с заменой сервера.
В Delphi 6 и 7 включены компоненты, позволяющие осуществлять программное администрирование сервера InterBase версии 6.0 и выше. В том числе – осуществлять резервное копирование базы данных и ее восстановление из копии. Процедура архивации / восстановления самым благоприятным образом сказывается на производительности базы данных, так как удаляет «дырки» и перестраивает индексы. До недавнего времени эта операция, которую рекомендуется проводить хотя бы еженедельно (желательно каждый день), выполнялась опытным сотрудником (администратором сервера) с помощью специальных утилит. Если система управления баз данных сделана на заказ для небольших фирм, руководство таких фирм обычно не может позволить содержать в штате администратора сервера, так что периодичность процедуры «чистки» базы данных в этом случае растягивается на многие недели и месяцы, а производительность сервера при работе с ней постепенно становится удручающе низкой.
Программа IBConsole предназначена для управления сервером InterBase и является его консолью. Консоль устанавливается совместно с сервером InterBase, и находиться в его каталоге BIN, его главный файл называется IBConsole.exe. Программу так же можно запустить через меню Пуск Windows, выбрав команду программы \ InterBase\ IBConsole.
Для запуска и остановки сервера служит программа InterBaseServerManager, функциональность которой начинается с версии Delphi 6, значительно уменьшилась.
Программа IBConsole обеспечивает:
· Управление локальными и удаленными серверами;
· Управление базами данных;
· Интерактивное управление SQL запросов.
Основную часть окна IBConsole занимают две панели. В левой панели в виде дерева представлены зарегистрированные серверы и их базы данных, а также элементы структуры, например, таблицы или пользователи. Отметим, что в качестве имени сервера или базы данных отображается его псевдоним, задаваемый при регистрации сервера или базы данных. В правой панели выводиться информация об объекте, выбранном в левой панели.
Управление сервером заключается:
· Регистрации сервера;
· Подключении сервера;
· Просмотре протокола работы;
· Управлении сертификатами;
· Определении пользователей.
Для управления сервером используются команды меню Server главного окна программы IBConsole, а также команды контекстного меню сервера и его элементов.
После запуска консоли в левой панели отображается список зарегистрированных серверов, которые первоначально отключены, о чем свидетельствует красный крестик в значке сервера.
Подключение к серверу, выбранному в левой панели, выполняется командой Login. При этом появляется окно ServerLogin, в котором необходимо указать имя пользователя (UserName) и его пароль (Password). После указания имени SYSBDA системного администратора, его пароля masterkey и нажатие кнопки Login осуществляется подключение к серверу, имя (alias) которого отображается в надписи Server, а к значку сервера добавляется зеленая галочка.
Отключение от выбранного сервера выполняется командой Logout. При этом выдается запрос на продолжение операций и в случае подтверждения сервер отключается.
После подключения к серверу можно выполнить проверку подключения к одной из его баз данных. Командой DiagnoseConnection открывается окно проверки соединения CommunicationDiagnostics, в котором указывается информация о сервере. В качестве баз данных задается ее файл, который можно выбрать в окне Open, открывается с помощью нажатия кнопки с тремя точками.
Кнопка Test инициирует проверку, результаты которой выводятся в поле Results.
На страницах TCP/ IP, NetBEUI, SPX можно выполнить настройку соответствующего сетевого протокола.
Для регистрации в консоли нового сервера необходимо выполнить команду Register, после чего открывается окно регистрации и соединение с сервером RegisterServerandConnect.
При регистрации локального сервера устанавливается переключатель LocalServer. При необходимости в поле описания (Description) можно ввести краткую информацию, поясняющую назначения и особенности сервера. После нажатия кнопки OK локальный сервер регистрируется, а его имя добавляется к списку левой панели.