Библиотека программиста

27.04.2024 - Создание таблиц. Ключи и индексы

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

В BDE достаточно логично поределена структура построения полей и их типов. Для этого имеются классы TxxxDef (три икса здесь обозначают подстановку, а то мало ли что Вы подумаете ;)), произведенные ото абстрактного базового класса TNamedItem. В компоненте TTable имеются и соответствующие свойства

TIndexDefs
TFieldDefs


Как и следовало предполагать, эти свойства содержат в себе определения индексных и обычных полей. Здесь нет свойства типа TKeyDefs, потому что в таблицах типа Парадокс индексные поля могут быть сами по себе уникальны. За счет этих свойств и задаются параметры таблицы, ее сетка. Создание таблицы довершает метод CreateTable.

Теории было много, теперь практика. Вот пример, честно скажу, взятый их Хелпа и перекомментированный автором (то есть мной).

Код
if (!Table1->Exists) // Don't overwrite an existing table
{
Table1->Active = false; // Компонент TTable должен быть отключен.

// Опишем параметры таблицы.
Table1->DatabaseName = "BCDEMOS";//это по желанию
Table1->TableType = ttParadox; //как обычно, Парадокс.
Table1->TableName = "CustInfo";//имя создаваемой таблицы.

// Опишем поля и их типы.
Table1->FieldDefs->Clear();
TFieldDef *pNewDef = Table1->FieldDefs->AddFieldDef();
pNewDef->Name = "Field1";// имя, обычной строкой.
pNewDef->DataType = ftInteger;//то, о чем я говорил.
//установим, является ли поле обязательным
pNewDef->Required = true;
//еще одно поле.
pNewDef = Table1->FieldDefs->AddFieldDef();
pNewDef->Name = "Field2";
pNewDef->DataType = ftString;
//определим размер поля.
pNewDef->Size = 30;
// Теперь взялись за индексы
Table1->IndexDefs->Clear();
/* Первый индекс безымянный, поскольку это основной индекс Парадокса. */
Table1->IndexDefs->Add("","Field1", TIndexOptions() <<ixPrimary << ixUnique);
Table1->IndexDefs->Add("Fld2Index","Field2", TIndexOptions() << ixCaseInsensitive);

// Ну и наконец, создаем таблицу.

Table1->CreateTable();



Это все еще объяснять и объяснять. Но, я надеюсь, общая логика понятна.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=227