Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объекты и концепции базы данных 
:(
    Опции темы
maaks_mouse
Дата 22.9.2008, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2005

Репутация: 2
Всего: 3



Объекты и концепции базы данных

База данных состоит из различных объектов, таких как таблицы, виды, домены, сохраненные процедуры, триггеры. Объекты базы данных содержат всю информацию о ее структуре и данных. Объекты базы данных так же упоминаются, как метаданные.
Следующие разделы содержат краткую информацию об объектах и концепциях базы данных InterBase:
•    Таблицы (Tables) 
•    Столбцы (Columns) 
•    Типы данных (Data types) 
•    Домены (Domains) 
•    Справочные ограничения целостности (Referential integrity constraints) 
•    Индексы (Indexes) 
•    Виды (Views) 
•    Сохраненные процедуры (Stored procedures) 
•    Триггеры (Triggers) 
•    Генераторы (Generators) 
•    Защита (Security) 

Таблицы (Tables)

Реляционные базы данных хранят все данные в таблицах. Таблица это структура, состоящая из множества неупорядоченных горизонтальных строк (rows), каждая из которых содержит одинаковое количество вертикальных столбцов (colums). Пересечение отдельной строки и столбца называеися полем (field), которое содержит специфическую информацию. Многие принципы работы реляционной базы данных взяты из определений отношений (relations) между таблицами.
InterBase хранит информацию о метаданных в специальных таблицах, которые называются системными таблицами (system tables). Системные таблицы имеют специальные столбцы, которые содержат информацию о типе метаданных в этой таблице. Имена всех системных таблиц начинаются с "RDB$". Пример системной таблицы - RDB$RELATIONS, которая содержит информацию о каждой таблице в базе данных.
Системные таблицы имеют такую же структуру, как и определенные пользователем таблицы и расположенны в той же самой базе. Так как метаданные, пользовательские таблицы, и данные все вместе расположены в одном и том же файле базы данных, каждая база данных является законченным модулем и может быть легко перенесена между различными машинами.
Системные таблицы могут быть изменены подобно любой другой таблице базы данных. Если вы не понимаете всех взаимосвязей между системными таблицами, то непосредственное изменение их может иметь негативный эффект на другие системные таблицы и разрушить вашу базу данных.

Столбцы (Columns)

Создание таблицы главным образом подразумевает определение столбцов таблицы. Главные атрибуты столбца включают:
•    Имя столбца; 
•    Тип данных столбца или домен на котором он базируется; 
•    Может или нет поле столбца принимать значение NULL; 
•    Факультативно справочные ограничения целостности (referential integrity constraints). 

Типы данных (Data types)

Данные сохранены в определенном формате, который называется типом данных (data type). Типы данных могут быть классифицированы по четырем категориям: числовые (numeric), символьные (character), даты (date) и BLOB. Числовые данные включают в себя все числа, начиная с целых вплоть до чисел двойной точности с плавающей точкой. Символьные данные содержат строки текста. Даты используются для хранения дат и времени.
В то время как числовые, символьные и даты являются стандартными типами данных, BLOB-тип заслуживает специального внимания.
Тип данных BLOB 
InterBase поддерживает такой тип данных, как большие бинарные объекты (binary large object - BLOB), которые могут хранить данные неограниченного размера. Тип BLOB это расширение стандартной реляционной модели, которая обычно обеспечивает только типы данных фиксированной длины.
Тип данных BLOB аналогичен последовательному файлу (flat file), BLOB данные могут быть сохранены в любом формате (к примеру, бинарном или ASCII). BLOB, однако, это не отдельный файл. BLOB данные хранятся в базе данных наряду со всеми другими данными. Так как BLOB столбцы часто содержат большие и переменные объемы данных, BLOB столбцы хранятся в отдельных сегментах.
InterBase не поддерживает непосредственно преобразование BLOB данных в другие форматы, но на некоторых платформах, BLOB фильтры могут транслировать BLOB данные из одного формата в другой.

Домены (Domains)

В добавление к явному определению типа данных столбцов, InterBase обеспечивает глобальные определения столбцов или домены (domains), на которых могут базироваться определения столбцов. Домен содержит информацию о тип данных, устанавливает атрибуты и ограничения целостности столбцов. В последующем при создании таблиц возможно использовать домены для определения столбцов.
Справочные ограничения целостности (Referential integrity constraints)
InterBase позволяет вам определять правила обеспечивающие целостность информации хранящейся в столбцах, эти првавила названы справочными ограничениями целостности (referential integrity constraints). Ограничения целостности управляют связями типа столбец-таблица (column-to-table) и таблица-таблица (table-to-table) а также проверкой ввода данных. Они выпонены через первичные ключи (primary keys), внешние ключи (foreign keys) и проверочные ограничения (check constraints). Обычно первичный ключ это столбец (или группа столбцов), которые используются, чтобы уникально идентифицировать строку таблицы. Внешний ключ это столбец, чьи значения должны соответствовать значениям столбца в другой таблице. Проверочные ограничения - ограничивают ввод данных определенным диапазоном или набором значений.
Например, таблица EMPLOYEE могла бы быть определена имеющей внешний ключ столбец DEPT_NO. Который определен в соответствии со столбцом номера отдела в таблице DEPARTMENT. Это гарантировало бы, что каждый служащий из таблицы EMPLOYEE связан с существующим отделом в таблице DEPARTMENT.

Индексы (Indexes)

Индексы это механизм для улучшения быстродействия поиска данных. Индекс определяет столбцы которые могут быть использованы для эффективного поиска и сортировки в таблице. 
InterBase автоматически определят уникальные индексы для первичных и внешних ключей таблицы.

Виды (Views)

Вид (view) это виртуальная таблица, которая не сохранена физически в базе данных, но ведет себя точно также как "реальная" таблица. Вид может содержать данные из одной или более таблиц или других видов и используется для хранения часто используемых запросов (queries) или множества запросов в базе данных.
Виды могут также обеспечивать ограниченные средства защиты, так как они могут обеспечивать доступ пользователей к подмножеству доступных данных при скрытии других связанных и чувствительных данных.
Сохраненные процедуры (Stored procedures)
Сохраненные процедуры (stored procedure) это отдельные программы, написанные на языке процедур и триггеров InterBase, который является расширением SQL. Сохраненные процедуры являются частью метаданных базы данных. Сохраненные процедуры могут получать входные параметры, возвращать значения приложению и могут быть вызваны явно из приложения или подстановкой вместо имени таблицы в инструкции SELECT.
Сохраненные процедуры обеспечивают следующие возможности:
•    Модульный проект: сохраненные процедуры могут быть общими для приложений, которые обращаются к той же самой базе данных, что позволяет избегать повторяющегося кода, и уменьшает размер приложений. 
•    Упрощают сопровождение приложений: при обновлении процедур, изменения автоматически отражаются во всех приложениях, которые используют их без необходимости их повторной компиляции и сборки. 
•    Улучшают эффективность работы: Особенно для удаленных клиентов. Сохраненные процедуры выполняются сервером, а не клиентом, что снижает сетевой трафик. 

Триггеры (Triggers)

Триггеры это отдельная программа, ассоциированная с таблицей или видом, которая автоматически выполняет действия, при добавлений, изменений или удалений строки в таблице или виде.
Триггеры могут обеспечивать следующие возможности:
•    Автоматическое ограничение ввода данных, что бы гарантировать, что пользователь ввел только допустимые значения в поля столбцов. 
•    Упрощение сопровождения приложений, так как изменение в триггере автоматически отражается во всех приложения, которые используют таблицы со связанными с ними триггерами. 
•    Автоматическое документирование изменений таблицы. Приложение может упровлять логом изменений с помощью триггиров, которые выполняются всякий раз, когда происходит изменение таблицы. 
Когда триггер вызван, он имеет непосредвенный доступ к добавлению, изменению или уничтожению данных. Триггеру могут быть так же доступны данные из других таблиц. Вы можете разрабатывать триггеры для:
•    Завершения операции, возможно с сообщением об ошибке. 
•    Установки значений в записи к торой вы обращаетесь. 
•    Добавления, изменения или удаления строк в других таблицах. 

Генераторы (Generators)

Генератор (generator) это механизм который создает последовательный уникальный номер, который автоматически вставляется в столбец базой данных, когда выполняются операции INSERT или UPDATE. Генератор обычно применяется для создания уникальных значений, вставляемых в столбец, который используется как PRIMARY KEY. Для базы данных может быть определено любое число генераторов, каждый генератор должен имеет уникальное имя.

Защита (Security)

SQL защита (securite) управляется на уровне таблицы привилегий доступа - списка операций, которые разрешены пользователю над данной таблицей или видом. Инструкция GRANT назначает привилегии доступа к таблице или виду конкретным пользователям или процедурам. Инструкция REVOKE удаляет предварительно предоставленные привилегии доступа.




PM ICQ GTalk Jabber YIM   Вверх
maaks_mouse
Дата 22.9.2008, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2005

Репутация: 2
Всего: 3



Типы данных
Ниже перечислены типы данных доступные в SQL инструкциях InterBase:

BLOB
Синтаксис: BLOB
Размер: Переменный
Диапазон/Точность: Нет
Описание: Большой двоичный объект. Сохраняет данные большого объема, такие как графика, текст и цифровой звук. Основная структура модуля: сегмент. Cубтип данных BLOB описывается в их контексте.
________________________________________
CHAR
Синтаксис: CHAR(n)
Размер: n символов
Диапазон/Точность: от 1 до 32767 байтов. Размер символа кодировки определяет максимальное число символов, которые разместятся в 32K.
Описание: Фиксированной длины CHAR или строка текста. Альтернативное ключевое слово: CHARACTER
________________________________________
DATE
Синтаксис: DATA
Размер: 64 бита
Диапазон/Точность: от 1 янв 100 до 11 янв 5941
Описание: Так же включает информацию о времени.
________________________________________
DECIMAL
Синтаксис: DECIMAL (precision, scale)
Размер: Переменный
Диапазон/Точность: precision = от 1 до 15. Определяет, что сохраняется, по крайней мере precision цифр числа. scale = от 1 до 15. Определяет число знаков после запятой. Должно быть меньше или равно precision.
Описание: Для примера, DECIMAL(10,3) сохраняет числа точно в следующем формате: ppppppp.sss
________________________________________
DOUBLE PRECISION
Синтаксис: DOUBLE PRECISION
Размер: 64 бита
Диапазон/Точность: от 1.7E-308 до 1.7E308
Описание: Для научных вычислений: 15 цифр точности.
Обратите внимание: Текущий размер типа DOUBLE зависит от платформы. Большинство платформ поддерживает размер в 64 бита.
________________________________________
FLOAT
Синтаксис: FLOAT
Размер: 32 бита
Диапазон/Точность: от 3.4E-38 до 3.4E38
Описание: Одиночная точность: 7 цифр точности.
________________________________________
INTEGER
Синтаксис: INTEGER
Размер: 32 бита
Диапазон/Точность: от -2 147 483 648 до 2 147 483 648
Описание: Длинное целое со знаком (long, longword).
________________________________________
NUMERIC
Синтаксис: NUMERIC (precision, scale)
Диапазон/Точность: precision = от 1 до 15. Определяет, что сохраняется, по крайней мере precision цифр числа. scale = от 1 до 15. Определяет число знаков после запятой. Должно быть меньше или равно precision.
Описание: Для примера, NUMERIC(10,3) сохраняет числа точно в следующем формате: ppppppp.sss
________________________________________
SMALLINT
Синтаксис: SMALLINT
Размер: 16 бит
Диапазон/Точность: от -32768 до 32767
Описание: Короткое целое со знаком. (shot, word).
________________________________________
VARCHAR
Синтаксис: VARCHAR (n)
Размер: n символов
Диапазон/Точность: от 1 до 32767 байтов. Размер символа кодировки определяет максимальное число символов, которые разместятся в 32K.
Описание: переменной длины CHAR или строка текста. Альтернативные ключевые слова: VARYING CHAR, VARYING CHARACTER. 




P.S. маленькая полезность
Обработка ошибок
Каждый раз когда исполняемая инструкция SQL выполнена, переменная SQLCODE устанавливается в значение, которое указыввает на ее успех или сбой.
Следующая таблица перечисляет значени, которые возвращяются в SQLCODE:

SQLCODE    Сообщение    Значение
< 0                SQLERROR    Произошла ошибка. Инструкция не выполнялась.
0                SUCCESS    Успешное выполнение.
+1...99                SQLWARNING    Системное предупреждение или информационное сообщение.
+100                NOT FOUND    Нет допустимых строк или достигнут конец текущего активного набора строк.

В ISQL, когда происходит ошибка, выводится номер и сообщение ошибки.





Создание уникальных значений ключа в Interbase.

При создании любой информационной системы с использованием SQL сервера возникает проблема генерации значения ключа в таблице.
Итак, представим, что у нас есть таблица TABLE1 : 

Код

create table TABLE1 
(
ID INTEGER not null,
NAME VARCHAR(50) not null,
ADR VARCHAR(20) not null,
constraint PK_TABLE1 primary key (ID)
);

Нам необходимо обеспечить уникальность каждого кортежа в этой сущности TABLE1. Для этого существуют 3 способа: 

1. Неправильный 
В чем он заключается... Идея очень проста - при добавлении записей получаете максимальное значение ключа (select max(ID) from TABLE1), увеличиваете его на некоторую величину и используете в запросе (insert into table1 values(максимальное_значение_ключа+1,......) Недостатки этого способа достаточно очевидны - при многопользовательской работе возникают конфликты, когда несколько клиентов, пишущих в БД, получают одинаковые значения ключа. 

2. Непереносимый 
В чем он заключается... Использование этого метода основанно на механизме ГЕНЕРАТОРОВ в Interbase. Генератор - это особый механизм, гарантирующий, что при каждом обращении к нему будет генерироваться новый ключ. 
Синтаксис - CREATE GENERATOR <имя генератора>; 
Далее можно установить, с какой величины будет генерироваться ключ. 
Синтаксис - SET GENERATOR <имя генератора> TO <начальное значение генератора>; 
Далее создается хранимая процедура 
Код

CREATE PROCEDURE <имя процедуры> 
RETURNS (ID INTEGER)
AS
BEGIN 
ID = GEN_ID( <имя генератора>, <приращение генератора>);
END !!

После этого в Delphi кидаем на форму объект TStoredProc, прописываем в свойствах Alias и выбираем имя процедуры. При необходимости сгенерировать значение ключа пишем что-то типа: 
Код

.......
sp_InNaklTextId.ExecProc;
PRIM_KEY:=sp_InNaklTextId.Params[0].AsInteger;

И далее Prim_key используем в запросе на добавление записи. 

3. Переносимый 
Идея состоит в некотором видоизменении 2 способа. Все также объявляем генератор, но вот хранимой процедуры больше нет, зато есть триггер. Выглядит это примерно так: 
Код

create generator TABLE1_GEN;
set generator TABLE1_GEN to 0;
commit;

set term !! ; 
create trigger TRG_TABLE1_INSERT for TABLE1
before insert
as begin
if (new.ID is null) then 
  new.ID= GEN_ID(TABLE1_GEN,1);
end!!

set term ; !!
commit;

Далее при добавлении записи запрос указывает в виде: 
Код

insert into TABLE1(name,adr)
values('xxx','xxx');


В общем появляется некоторое неудобство при написании запросов, так как первое поле ключевое, и надо указать, что в него запись не производиться. 
Главное же преимущество такого подхода в том, что увеличивается переносимость приложения между различными SQL серверами. Идея создания автогенератора ключа не нова - это и AutoIncrement поле в Paradox, и тип поля Identity в Ms SQL Server / Sybase, и вроде бы тоже некий тип поля в Oracle (к сожалению не знаю точно). Но эти механизмы не стандартизованны и каждый реализует их по своему. Описанный же выше подход обеспечивает переносимость, и, например, одно из написанных мною приложений, если не брать в расчет хранимые процедуры, одинаково работает и на IB и на MS SQL.


Это сообщение отредактировал(а) maaks_mouse - 21.12.2009, 16:43
PM ICQ GTalk Jabber YIM   Вверх
Deniz
Дата 22.9.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Код
create trigger TRG_TABLE1_INSERT for TABLE1
before insert
as begin
new.ID= GEN_ID(TABLE1_GEN,1);
end
триггер так выглядеть не должен.
Срочно поправить на
Код
create trigger TRG_TABLE1_INSERT for TABLE1
before insert
as begin
if (new.ID is null) then 
  new.ID= GEN_ID(TABLE1_GEN,1);
end


Цитата(maaks_mouse @  22.9.2008,  10:19 Найти цитируемый пост)
и вроде бы тоже некий тип поля в Oracle (к сожалению не знаю точно)
там есть последовательности, примерно тоже что и генератор, только выбор сл-щего значения 
Код
ИмяПоследовательности.NextVal


Это сообщение отредактировал(а) Deniz - 24.9.2008, 05:07


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
maaks_mouse
Дата 21.12.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 13.3.2005

Репутация: 2
Всего: 3



Deniz, да действительно ..спасибо за замечание (поправил).
PM ICQ GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0996 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.