Автор работы: Пользователь скрыл имя, 29 Октября 2012 в 14:23, лабораторная работа
Цель работы: познакомить с понятием "концептуальная модель"; научиться правильно использовать принципы нормализации при проектиировании базы данных.
Постановка задачи
Пусть некоторая риелтерская контора "Аренда Minus" специализируется на заключении договоров аренды жилых помещений. Круг клиентов-арендаторов "Аренда Minus" не стабилен. Необходимо автоматизировать процесс регистрации и хранения договоров аренды.
Хранимые процедуры позволяют не только возвращать данные, но и манипулировать ими. Для этого используют DML-команды языка SQL. Такие процедуры удобны, например, для реализации каскадного механизма сохранения ссылочной целостности. Покажем, как, используя компоненты TStoredProc и TQuery, можно инициировать процедуры манипуляции данными.
Ход работы:
Свойства компонента TDatabase Свойства компонента TStoredProc
Свойство |
Значение |
Свойство |
Значение | |
AliasName |
clsrvExmpl |
DatabaseName |
Exmpl | |
DatabaseName |
Exmpl |
StoredProcName |
Update_Lease | |
Params |
User Name=SYSDBA PASSWORD=masterkey |
Params |
Ldat=12.08.2005 | |
LoginPrompt |
False |
|||
Connected |
True |
4. Создайте хранимую процедуру:
CREATE PROCEDURE UPDATE_LEASE(LDat TIMESTAMP, NumLease SMALLINT)
AS
BEGIN
UPDATE Lease SET LDate = :LDat
WHERE NLease = :NumLease;
SUSPEND;
END
5. Для исполнения хранимой процедуры поместите на форму кнопку и ассоциируйте с ней процедуру:
procedure TForml.ButtonlClick(Sender: TObject); begin
with StoredProcl do begin
ParamByName('NumLease').
Editl.Text := 'Данные изменены' end; end;
Ход работы:
Свойство |
Значение |
DatabaseName |
Exmpl |
SQL |
EXECUTE PROCEDURE UPDATE_LEASE(’14.05.2001’, 3) |
procedure TForml.ButtonlClick(Sender: TObject);
begin
with Queryl do begin
Prepare; ExecSQL;
Editl.Text := 'Данные изменены';
end;
end;
Используя, IBConsole можете убедиться, что дата заключения третьего договора изменилась.
Различают входные и выходные параметры. Первые из них — это исходные данные для хранимых процедур, а вторые — результаты исполнения хранимых процедур. С выходными параметрами мы уже знакомились, когда отображали результат суммирования хранимой процедурой Get_SumRent в проекте RetResStorProc. Для знакомства с входными параметрами внесем изменения в этот проект.
Ход работы:
with StoredProcl do begin
следующий код:
//Ввести значение параметра
paramByName('Tenant').AsString := Editl.Text;
Ввод значения параметра хранимой процедуры
Разработаем приложение типа "главный-подчиненный", т. е. когда свойство Params компонента TQuery не задано ни во время разработки приложения, ни в процессе его исполнения, и оно определяется по данным свойства DataSource. Это свойство используют для связи с другим набором данных. Таким набором может быть TTаblе, TQuery или другой потомок TDataSet. По значениям свойств SQL компонентов TQuery заданных наборов данных определяют одинаковые поля. Если такие есть, то связь наборов данных устанавливают по этим полям.
Ход работы:
Код скрипта WhoThatRentsql
CREATE PROCEDURE Get_WhoThatRent(Tenant CHAR(10))
RETURNS (Lease ID SMALLINT, Rent Тур CHAR(20), Rent_Rn NUMERIC(6, 2))
AS
BEGIN
FOR SELECT Lease.NLease, Rent.Тур, Rent.Rn
FROM Tenant, Lease, Realty, Rent WHERE (Tenant.Tn = :Tenant)
AND (Lease.NTn = Tenant.NTn)
AND (Realty.AdR = Lease.AdR)
AND (Rent.Тур = Realty.Тур) INTO :Lease_ID, :Rent_Typ, :Rent_Rn DO
SUSPEND;
END
Queryl.Close;
Queryl.ParamByNameCPrm').
Queryl.Open;
SELECT * FROM Get_WhoThatRent(:Prm)
Возвращение набора данных
Цель работы: научится выполнять сортировку, поиск и фильтрацию в наборах данных.
Сортировка заключается в упорядочивании записей по определенному полю в порядке возрастания или убывания содержащихся в нем значений. Сортировку можно выполнять и по нескольким полям.
Сортировка наборов данных Table выполняется автоматически по текущему индексу. При смене индекса происходит автоматическое переупорядочивание записей. Таким образом, сортировка возможна по полям, для которых создан индекс. Для сортировки по нескольким полям нужно создать индекс, включающий эти поля. Направление сортировки определяет параметр ixDescending текущего индекса.
Список полей, по которым выполняется сортировка наборов данных Query, указывается в операнде ORDER BY. Поля в списке обозначаются именами или номерами, которые соответствуют номерам в списке полей после слова SELECT. По умолчанию сортировка происходит в порядке возрастания значений полей. Для указания обратного порядка сортировки по какому-либо полю нужно указать после имени этого поля описатель DESC.
Задание: Выполнить сортировки в таблицах базы данных Exmpl.gdb:
Таблица |
Поле |
Порядок сортировки |
Owner |
Ow |
По убыванию |
NOn |
По убыванию | |
Lease |
Ldate |
По возрастанию |
Realty |
Тур |
По алфавиту |
Rent |
Rn |
По возрастанию |
Поиск — это нахождение записи, удовлетворяющей определенным условиям, и возврат значений ее полей с возможным переходом на найденную запись. Отметим, что поиск можно вести по одним полям, а возвращать значения других полей. Составы полей для поиска и для возврата значений в общем случае не совпадают.
При организации поиска записей важное значение имеет наличие индекса для полей, по которым ведется поиск. Индексирование значительно повышает скорость обработки данных, кроме того, ряд методов может работать только с индексированными полями. К средствам поиска можно отнести методы Locate, Lookup, FindFirst, FindLast, FindNext и FindPrior, осуществляющие переход на записи, удовлетворяющие условиям фильтра, а также просмотры и курсоры.
Для создания просмотра применяют команду:
CREATE VIEW имяПросмотра [(CTon6eu_view [,столбец_у!ew ...])]
AS <onepaTop_select> [WITH CHECK OPTION];
Создадим просмотр rent_cost, который позволит просмотреть данные таблицы Rent.
CREATE VIEW RENT_COST
AS SELECT Тур, Rn FROM Rent
Выбор просмотра RENT_COST
Поскольку просмотр — это виртуальная таблица, то можно модифицировать ее данные. Однако это возможно, если запрос соответствует трем условиям:
Такой запрос называют модифицируемый (updatable). Если в определении просмотра нарушено хотя бы одно из выше перечисленных условий, то он — не модифицируемый (read-only).
rent_cost —. модифицируемый запро. Чтобы убедиться, можете переоценить стоимость аренды однокомнатных квартир.
UPDATE RENT_COST SET Rn = 70 WHERE Rn = 60
CREATE VIEW REALTY_COST AS
SELECT ADR, RN
FROM REALTY, RENT
WHERE RENT.TYP = REALTY.TYP
UPDATE REALTY_COST SET RN = 60 WHERE RN = 70
Контрольный вопрос: Каким должен быть результат исполнения следующей команды:
SELECT * FROM REALTY_COST
Для поиска записей по полям служат методы Locate и Lookup, причем поля могут быть неиндексированными. Функция Locate (const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions): Boolean ищет запись с заданными значениями полей. Если удовлетворяющие условиям поиска записи существуют, то указатель текущей записи устанавливается на первую из них. Если запись найдена, функция возвращает значение True, в противном случае — значение False. Для поиска в наборе данных также используется функция Lookup(const KeyFields: String; const KeyValues: Variant; const ResultFields: String): Variant осуществляет поиск записи, удовлетворяющей определенным условиям, но, в отличие от метода Locate, не перемещает указатель текущей записи на найденную запись, а считывает информацию из полей записи.
Для набора данных Table имеются методы,
позволяющие вести поиск
Задание: Выполнить поиск информации об объекте и владельцах недвижимости в таблицах базы данных Exmpl.gdb. Проверить информацию об арендованных объектах недвижимости на введенную дату.
Информация о работе Проектирование структуры базы данных. Нормализация таблиц