Значение соответствующему ключу не задано. Физические модели данных (внутренний уровень). Универсальная коллекция Дерево значений

Строится следующим образом. Последовательность записей, соответствующая записям исходной таблицы, упорядочивается по значениям первичного ключа. Логические записи объединяются в блоки (по k записей в блоках).

Значением ключа блока является минимальное значение ключа у записей, входящих в блок. Последовательность блоков представляет собой последний уровень В-дерева . Строится индекс предыдущего уровня. Записи этого уровня содержат значение ключа блока следующего уровня и указатель-адрес связи соответствующего блока; записи этого уровня также объединяются в блоки (по k записей). Затем аналогично строится индекс более высокого уровня и т.д., пока количество записей индекса на определенном уровне будет не более k .

Рассмотрим процедуру работы с B-деревом на примере. Пусть имеется файл экземпляров логических записей, ключи которых принимают значения 2, 7, 8, 12, 15, 27, 28, 40, 43, 50. Для определенности возьмем k=2 (в блок объединяем по 2 экземпляра записей ). Построенное для этого примера изображено на рис. 9.7 (для упрощения рисунка на уровне 4 представлены только ключи логических записей и не представлены значения других полей этих записей).


Рис. 9.7.

В блоках указано значение ключа соответствующего блока. Значение k принято равным 2.

По построению В-дерева все исходные записи находятся на одном расстоянии от верхнего индекса (дерево является сбалансированным).

Рассмотрим реализацию основных операций.

Поиск и чтение записи с заданным значением ключа

Читается верхний индекс. Сравниваем заданное значение ключа со значением ключа последней записи индекса. Если заданное значение ключа больше, чем значение ключа очередной записи индекса (если такая запись имеется), или равно ему, то по адресу связи, указанному в текущей записи, читается блок записей индекса следующего уровня. Далее процесс повторяется.

Считаем, что все блоки расположены в ВП. Тогда число обращений к ВП при поиске информации будет равно числу уровней дерева. Число уровней дерева равно минимальному значению l , при котором выполняется условие k l >= N (N – число логических записей).

Модификация (корректировка) записи

После поиска и чтения записи изменяются корректируемые поля. Если корректируется не ключ записи, то измененная запись заносится на свое место. Если изменено значение ключа, то старая запись удаляется (в соответствующем блоке появляется "пустая" запись), а измененная запись заносится так же, как вновь добавляемая.

Удаление записи

После поиска найденная запись удаляется (в соответствующий блок на место этой записи заносится "пустая" запись).

Добавление записи

Прежде всего определяется, где должна быть расположена добавляемая запись с заданным значением ключа. Процедура поиска блока, где должна быть расположена эта запись, аналогична вышеописанной процедуре поиска записей с заданным значением ключа. Если в найденном блоке низшего уровня есть "пустая" запись, добавляемая запись заносится в этот блок (с необходимым переупорядочением записей внутри блока).

Если в соответствующем блоке низшего уровня нет пустого места, блок делится на два блока. В первый из них заносится записей, во второй заносятся остальные. Значением ключа каждого из указанных блоков будет являться, как и описано ранее, минимальное значение ключей у записей, входящих в блок. Добавляемая запись заносится в тот блок, значение ключа которого меньше значения ключа добавляемой записи. Появление нового блока с новым значением ключа обусловливает необходимость формирования соответствующей новой записи в индексе на предыдущем уровне. Эта запись содержит новое значение ключа нового блока и указатель на его месторасположение. Процедура добавления такой записи аналогична описанной выше. Находится блок предыдущего уровня, куда должна быть помещена эта запись. Если в блоке есть пустое место, запись добавляется в блок, если блок полон, он делится на два блока, запись заносится в один из блоков, формируется запись индекса предыдущего уровня и т.д.

Возможен вариант, когда придется делить блок самого верхнего уровня и формировать еще один уровень дерева.

Рассмотрим для примера, изображенного на рис. 9.7 , добавление записи с ключом 10.

1. Сравнение на первом уровне.

Движение по левой ветви.

2. Сравнение на втором уровне.

Движение по левой ветви.

3. Сравнение на третьем уровне.

Движение по правой ветви.

Искомый блок

4. Блок заполнен.

Он делится на 2 блока

Сравнение 8<10<12.

Запись с ключом 10 заносится в блок 1

На низшем уровне появилась новая запись с значением ключа 12. Необходимо добавление новой записи с ключом 12 и указателем на запись низшего уровня к индексу предыдущего уровня.

5. Запись с ключом 12 уровня 3 должна добавляться в блок. Блок полон, он делится на два блока

Сравнение 8<12.

Запись добавляется во второй блок

6. На уровне 3 появился блок с новым ключом 8. Необходимо добавление новой записи с ключом 8 и указателем на соответствующий блок уровня 3 на уровне 2.

7. Запись с ключом 8 уровня 2 должна добавиться в блок. Блок полон, он делится на два блока.

Запись добавляется в блок 1.

8. На уровне 2 появился блок с новым ключом 15, необходимо добавление новой записи с ключом 15 и указателем на соответствующий блок уровня 2 на уровне 1.

1. Для того, чтобы в табличной части после выбора номенклатурной позиции подставлялась цена, а при проставлении количества рассчитывалась общая сумма, необходимо: прописатьнужных свойствах соответствующих колонок имена обработчиков событий- 2. В понятие "Данные" для элементов управления формы не входят: переменные, определенные в модуле данной формы+ 3. Реквизит формы: доступен в контексте этой формы 1. Для обработки события у элемента управления можно определить: только один обработчик события+ 2. Как создать реквизит формы?: добавить элемент управления и указать в свойстве "Данные" имя нового реквизита- обоими способоами 3. Каким образом в режиме Конфигуратора визуально проверить действие привязок на то, как будет выглядеть форма при изменении ее размеров в режиме 1С:Предприятие 8.0? меню Форма пункт Проверить+ 4. Где размещается описание обработчика события "Нажатие" кнопки диалога: в модуле формы+ 5. При оформлении диалога формы можно определять... любое количество элементов формы, связанных с одним и тем же элементом данных+ 6. В свойство "Данные" элемента формы нельзя выбрать: реквизит, если он имеет тип "Хранилище значений"+ 7. Когда возникает событие "При активизации строки"?при переходе на другую строку списка+ 8. Как сделать невидимым в режиме Конфигуратора элемент формы Разделитель? выбрать значение Нет рамки для свойства Рамка элемента формы+ 9. Основной реквизит формы…отсутствует у форм произвольного типа+ 10. Обработчики событий в модуле формы можно определять: для табличных частей 11. При оформлении диалога формы можно определять... только один элемент формы, связанный с одним элементом данных- 12. В свойство "Данные" элемента формы нельзя выбрать: реквизит, если он имеет тип "Хранилище значений"+ 13. Нестандартный порядок расшифровки: доступен в модуле соответствующего объекта- 1. Обработчики событий в модуле формы можно определять: для реквизитов объекта- 2. Какой элемент управления позволяет изменить взаимное расположение полей? разделитель+ Для обращения в модуле формы (обработчике события) к данным текущей строки (выбранной пользователем) табличной части объекта необходимо: использовать свойства и методы формы, элементов формы -/обратиться напрямую по имени реквизита табличной части в контексте текущей строки-/обратиться через точку от имени табличной части (Товары.Номенклатура)- В модуле приложения...:нет ограничений на описание переменных, процедур, функций+ Можно ли программно удалить элемент формы в диалоге?: нельзя- /можно только в том случае, если он программно и добавлен Можно ли разрешить форме быть "прячущейся" (.РазрешитьСостояниеПрячущееся=Истина;)?: можно только до открытия формы+ К свойству объекта можно обратиться через:скобки: Объект[ИмяСвойства]- обоими При программном поиске элемента справочника в случае, если с указанными параметрами ничего не найдено, то метод возвратит… пустую ссылку+ Для обращения к предопределенному элементу справочника необходимо:найти его по имени: Справочники.ИмяСправочника.ИмяЭлемента+ В общих модулях...: нет ограничений на описание переменных, процедур, функций- Когда можно отказаться от записи объекта в обработчике события?: либо в "перед записью", либо "при записи": все+ При записи документа (в любой из форм документа)...: первоначально выполняется процедура "При записи" модуля объекта, затем - обработчик события "При записи" формы+ Для вывода значения переменной в табличный документ (на печать) /получить именованную область, записать значение переменной в параметр полученной именованной области и затем включить область в табличный документ+ Какую из ниже приведенных строк нельзя использовать в модуле внешнего соединения? СпрОбъект=Справочники.Номенклатура.СоздатьЭлемент()- При определении процедур и функций...: порядок следования описания процедур и функций значения не имеет+ 1. Ресурс у регистра сведений может иметь тип: любой + 2. Ресурс у регистра накопления может иметь тип: числовой+ 3. Подчиненный объект "Измерение" может быть у объектов вида: все+ 4. Табличные части могут быть у объектов вида: у всех + 5. При записи в регистр накопления дата движения: жестко привязывается к дате документа, если документ проводится оперативно - 6. Вариант проведения документа (оперативно или нет) ... для отслеживания варианта проведения необходимо обратиться к соответствующему методу глобального контекста -/в модуль проведения передается параметр с вариантом проведения 7. Для просмотра движений документа по какому-либо регистру, необходимо...: воспользоваться кнопкой "перейти" в панели инструментов журнала + 8. При определении справочника в конфигураторе было указано, что он редактируется "обоими способами". Может ли пользователь, работая с определенной формой списка изменить способ редактирования (с "в списке" на "в диалоге")?: не может - / кнопку 9. Режим непосредственного удаления в пользовательском режиме…: доступен для обоих видов объектов + 10. Набор текста в поле, имеющем агрегатный тип значения (справочник Номенклатура) ...: недопустим- 11. При проведении в Неоперативном режиме…при использовании данных из регистров автоматически получаются данные, актуальные только на момент проведения документа- / при использовании данных из регистров нужно получить данные, актуальные только на момент проведения документа 12. При указании свойства документа "Удалять движения" в состояние "Не удалять движения автоматически" …: автоматически снимает право "ОтменаПроведения"- при перепроведении документа перестают автоматически удаляться его старые движения - 13. Если документу в конфигураторе разрешено оперативное проведение, то... документ можно оформить только на текущую дату и текущее время - 14. При записи в регистр сведений (с периодичностью по регистратору) на произвольные даты (отличные от даты документа) в поле "Период" будет находиться: записываемая дата 15. Изменение границы рассчитанных остатков для соответствующих регистров накопления производится… по усмотрению пользователя+ При указании свойства документа "Удалять движения" в состояние "Не удалять движения автоматически" … :перестает выполняться интерактивное действие "Отмена проведения" (становится неактивным в контекстном меню)- К какой группе объектов конфигурации относится объект "Интерфейсы"? документы- Изменение границы рассчитанных остатков для соответствующих регистров накопления производится… по усмотрению пользователя+ При определении справочника в конфигураторе было указано, что он редактируется "обоими способами". Может ли пользователь, работая с определенной формой списка изменить способ редактирования (с "в списке" на "в диалоге")? : может, используя кнопку, расположенную в командной панели управления справочником+ В качестве регистратора у регистра сведений может выступать: любой объект- Справочник может быть подчинен: нескольким справочникам и планам видов характеристик+ При попытке записи в регистр сведений "Записи" со значениями измерений, комбинация которых уже прописана в регистре,... происходит замещение записи- Можно ли изменить набор свойств у объекта конфигурации? для каждого объекта конфигурации набор свойств жестко определен программой и не может быть изменен. Однако на этапе конфигурирования можно задать конкретные значения для каждого из свойств, определяя его поведение в режиме 1С:Предприятие+ Ключ может быть произвольного типа: у структуры- Какое из основных свойств объекта конфигурации позволяет представлять название объекта в окнах 1С:Предприятия в удобочитаемом виде (с использованием пробелов)? синоним+

Умолчания, ограничения и правила - это необязательные атрибуты, которые мож­но определять по колонкам и таблицам базы данных. Умолчания (зна­чения по умолчанию) - это значения, которые заносятся в определенную колонку. Ограничения (constraints) используются как способ идентифицирования допустимых значений для колонки (чтобы откло­нять недопустимые значения), а также как средство обеспечения целостности дан­ных в таблицах базы данных и между связанными таблицами. Ограничение только по одной колонке называется ограничением на значение (колонки):оно ограничивает значения только этой колонки. Ограничение, которое влияет на несколько колонок, называется ссылочным ограничением:в этом случае комбинация значений для колонок, указанных в данном ограничении, должна отвечать требованиям этого ограни­чения. Имеется пять типов ограничений: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY и CHECK.

Null-значение (null value) - это неизвестное значение, для которого применяется обозначение NULL. Null-значение в колонке обычно означает, что для данной строки этой колонки нет данных, потому что значение неизвестно, либо не имеет смысла, либо не задано или будет задано в будущем. Null-значения - это не пустые значения и не значения числа 0, их настоящие значения неизвестны (unknown), поэтому никакие два null-значения не являются равными.

Свойство IDENTITY . Когда вы создаете таблицу, вы можете задать одну из колонок как идентифицирующую колонку (identity column), добавив к определению колонки свойство IDENTITY. Если колонка создается со свойством IDENTITY, то SQL Server автоматически генерирует для этой колонки значение строки, рассчитываемое по начальному значе­нию и значению приращения. Начальное значениеявляется значением идентификации для первой строки, вставленной в таблицу. Приращение - это величина, на которую SQL Server увеличивает значение идентификации для последовательно вводимых строк. Каждый раз при вводе стро­ки SQL Server присваивает текущее значение идентификации элементу данных в колонке идентификации, вводимому в новую строку. Следующая введенная строка получит значение идентификации, большее, чем текущее максимальное значение идентификации на величину приращения. Идентифицирующие колонки обычно применяются в ограничениях первичного ключа в таблицах, благодаря которым возможна уникальная идентификация строк. Например, если вы зададите IDENTITY(1, 10), то значение идентифицирующей колонки для первой введенной строки будет равно 1, для второй строки будет равно 10, для третьей строки - 20, и т.д. Если начальное значение или приращение не задать, то для них будут применяться значения по умолчанию, равные 1 и 1. Идентифицирующие ко­лонки не могут содержать значения по умолчанию и для них не разрешено приме­нение null-значений. В каждой из таблиц может иметься только одна идентифици­рующая колонка.


По умолчанию, непосредственный ввод данных в идентифицирующие колонки невозможен и они не могут быть изменены. Если вы хотите повторить ввод удален­ной строки и хотите сохранить старое идентифицирующее значение этой строки, то вы можете преодолеть стандартные настройки, применив такой оператор:

SET IDENTITY INSERT имя.таблицы ON

При помощи этого оператора можно вставить строку и назначить нужное вам зна­чение идентифицирующей колонки. Закончив ввод строки, нужно отменить воз­можность вставки в идентифицирующую колонку при помощи такого оператора:

SET IDENTITYINSERT имя_таблицы OFF

После этого, SQL Server, в качестве начального значения, применяемого при добавлении следующих строк, возьмет самое большое значение из данной колонки.

Создание умолчания для колонки с помощью оператора CREATE TABLE является предпочтительным, стандартным методом. Следующий оператор создает в базе дан­ных MyDB таблицу, содержащую умолчания для обеих колонок, - columnA (типа char) и columnB (типа int):

CREATE TABLE MyTable

(columnA char(15) NULL DEFAULT "шт",

columnB int NULL DEFAULT 0)

Значение по умолчанию «шт» для колонки columnA совместимо с типом данных char этой колонки, и значение по умолчанию 0 для колонки columnB совместимо с типом данных int. Если при встав­ке новой строки в таблицу не указывается конкретное значение для одной или обеих колонок, то используется соответствующее значение по умолчанию. Поэтому един­ственным способом присваивания этим колонкам значения NULL является явная вставка NULL. Null-значения допустимы, поскольку для обеих колонок указан атрибут NULL. Если бы колонки были определены как NOT NULL, то вы не могли бы выполнять явную вставку значения NULL.

Ограничение PRIMARY KEY используется, чтобы задать первичный ключтаблицы, представляемый колонкой или набором колонок, уникальным образом идентифицирующих строку таблицы. Поскольку первичный ключ идентифицирует строку, соответствующая колонка никогда не содержит значения NULL. Если вы определяете ограничение PRIMARY KEY по набору коло­нок, это ограничение указывает, что комбинация значений этих колонок должна быть уникальной для каждой строки. Ограничение PRIMARY KEY не допускает дублированных значений. Если ограничение PRIMARY KEY присва­ивается колонке или набору колонок, то по этой колонке или колонкам первичного ключа автоматически создается уникальный индекс. Таблица может иметь только одно ограничение PRIMARY KEY. Колонка с атри­бутом IDENTITY хорошо подходит для первичного ключа. Следующий оператор T-SQL представляет один из способов задания колонки SSN как первичного ключа, когда вы определяете таблицу.

CREATE TABLE customer

midinit char(1) NULL,

last_name char(20) NOT NULL,

Cust_phone char(10) NULL)

Используя альтернативный способ, вы можете присвоить имя этому ограниче­нию, добавив ключевое слово CONSTRAINT. Чтобы присвоить имя PK_SSN ваше­му ограничению PRIMARY KEY, используйте следующий оператор:

CREATE TABLE customer

(first_name char(20) NOT NULL,

midinit char(1) NULL,

last_name char(20) NOT NULL,

SSN char(11) CONSTRAINT PK_SSN PRIMARY KEY,

cust_phone char(10) NULL)

Вы можете также задать ограничение PRIMARY KEY после того, как определе­ны все колонки таблицы. При использовании этого синтаксиса имя колонки долж­но быть заключено в круглые скобки и указано после предложения CONSTRAINT, как это показано в следующем операторе:

CREATE TABLE customer

(first_name char(20) NOT NULL,

midinit char(1) NULL,

last_name char(20) NOT NULL,

cust_phone char(10) NULL,

CONSTRAINT PK_SSN PRIMARY KEY (SSN))

Ограничение UNIQUE обеспечивает, что в колонке или наборе колонок не будут допускаться дублированные значения; иными словами, обеспечивается уникаль­ность значений в этой колонке или наборе колонок. Для поддержки этой уникаль­ности SQL Server создает по умолчанию уникальный индекс по колонке или колонкам, указанным в ограничении UNIQUE. Ограничение UNIQUE можно использовать для любой колонки, которая не яв­ляется частью ограничения PRIMARY KEY. Ограничение UNIQUE можно использовать для колонок, в которых разрешены null-значения, в то время как ограничения PRIMARY KEY нельзя использовать для таких колонок. На колонку с ограничением UNIQUE мо­жет ссылаться ограничение FOREIGN KEY. По одной таблице можно задавать несколько ограничений UNIQUE, пока общее число индексов для этой таблицы не превышает 250 индексов.

Чтобы создать ограничение UNIQUE по таблице с помощью T-SQL, используй­те оператор CREATE TABLE. Например, следующий оператор создает таблицу customer (покупатель) с ограничением UNIQUE по колонке SSN в виде индекса:

CREATE TABLE customer

(first_name char(20) NOT NULL,

midinit char(1) NULL,

last_name char(20) NOT NULL,

SSN char(11) NOT NULL UNIQUE CLUSTERED,

cust_phone char(10) NULL)

Ограничение CHECK используется, чтобы ограничить множество допустимых для колонки значений определенными значениями. Значения, которые используются при вставке в колонку или обновлении колонки, проверяются на истинность (зна­чение TRUE) указанного в ограничении булева условия поиска. Например, если бы нам нужно было ограничить диапазон возможных значений, допустимых для ко­лонки price (цена) таблицы items, величинами от $0,01 до $500,00, то мы использо­вали бы следующий оператор:

CREATE TABLE items

(itemname char(15) NOT NULL,

itemid smallint NOT NULL IDENTITY (1,1),

price smallmoney NULL,

item_desc varchar(30) NOT NULL DEFAULT "none",

CONSTRAINT PK_ itemid PRIMARY KEY (itemid),

CONSTRAINT CK_price CHECK (price >=0.01 AND price <= 500.00))

Создание и модифицирование ограничений с помощью Management Studio

Чтобы создать таблицу, раскройте в ле­вой панели Management Studio папку сервера и папку базы данных, щелкните правой кнопкой мыши на папке Tables (Таблицы) и затем выберите из контекстного меню пункт New Table (Создать таблицу). Чтобы появилось окно Design Table для какой-либо существующей таблицы, сначала щелкните на папке Tables, щелкните правой кнопкой мыши на имени этой таблицы в правой панели и затем выберите из кон­текстного меню пункт Design Table.

Чтобы указать, можно или нельзя использовать null-значения в какой-либо колон­ке, просто установите или сбросьте соответствующий флажок в колонке Allow Nulls (Разрешить null-значения) окна Design Table. Вы можете задать этот параметр при создании таблицы или при ее модифицировании.

Чтобы создать или модифицировать ограничение UNIQUE с помощью Management Studio , выполните следующие шаги:

1. В панели инструментов окна Design Table щелкните на кнопке Indexes/Keys.

  1. Появится следующее окно, позволяющее создавать, редактировать и удалять ограничения, связанные с первичными и уникальными ключами

Выберите имена колонок, которые хо­тите включить в ограничение и определите для него свойства.

Вы можете задать ограничение PRIMARY KEY по одной колонке или по несколь­ким колонкам. Эта колонка или колонки должны уникальным образом идентифи­цировать каждую строку таблицы. Чтобы задать ограничение PRIMARY KEY, вы­полните следующие шаги:

  1. В окне Design Table выберите колонку, щелкнув на одной из ячеек в ее строке. (Вы можете выбрать несколько колонок, удерживая клавишу Ctrl и щелкая на серых ячейках слева от имен колонок.)

  1. Щелкните правой кнопкой мыши на одной из выбранных колонок и выберите из контекстного меню пункт Set Primary Key (Задать первичный ключ). Слева от колонок, которые вы задали для первичного ключа, появится изображение не­большого ключа.
  2. Если вам нужно переместить ограничение PRIMARY KEY в другую колонку, просто задайте эту новую колонку как первичный ключ. От вас не требуется уда­лить сначала явным образом исходный первичный ключ - SQL Server удалит и снова создаст для вас индекс PRIMARY KEY. Вы можете также модифицировать индекс PRIMARY KEY в окне Properties. Ваши измене­ния начнут действовать после того, как вы сохраните вашу работу, щелкнув на кнопке Save в панели инструментов.

Чтобы создать ограничение CHECK с помощью окна Design Table, откройте это окно для таблицы, с которой хотите работать, и выполните следующие шаги.

1. Щелкните правой кнопкой мыши на окне Design Table и выберите из контекст­ного меню пункт Properties, чтобы появилось окно Properties. Щелкните на вкладке Check Constraints (Ограничения Check и щелкните на кнопке New для таблицы.

3. Обратите внимание на три флажка внизу этого окна. Установка флажка Check existing data on creation означает, что существующие данные таблицы будут проверяться на соответствие ограничению CHECK и если они не согласуются, то ограничение не будет создано. Установка флажка Enforce constraint for replication (Проверять ограничение для репликации) означает, что данное ограничение бу­дет проверяться при репликации данных. Установка флажка Enforce constraint for INSERTS and UPDATEs просто означает, что ограничение CHECK будет активизировано. Если не установить этот флажок, то данное ограничение будет создано, но оно не будет активизировано, т.е. не будет оказывать никакого влияния.

4. Щелкните на кнопке Close и затем щелкните на кнопке Save, чтобы сохранить новое ограничение. Чтобы модифицировать ограничение CHECK, используйте вкладку Check Constraint для изменения имени (Constraint name), выражения (Constraint expression) и флажков.

Вы можете также использовать вкладку Check Constraints для удаления ограни­чения CHECK, выбрав в списке Selected Constraint (Выбранное ограничение) имя ограничения, которое хотите удалить, и щелкнув на кнопке Delete.

Лабораторная работа рассчитана на 3 часа аудиторных занятий и состоит в изучении теоретического материала и получении практических навыков по определению таблиц базы данных, созданию правил, ограничений, умолчаний, пользовательских типов данных, индексов. Сдача лабораторной работы заключается в ответе на контрольные вопросы и демонстрации индивидуального задания на ПК.

  1. Название и цель работы
  2. Индивидуальное задание
  3. Скрипты на создание пользовательского типа данных и таблиц БД, в соответствии с индивидуальным заданием

Контрольные вопросы

  1. Перечень поддерживаемых типов данных?
  2. Пользовательский тип данных. Назначение и способы создания?
  3. Способы определения таблиц?
  4. Назначение умолчаний, правил и ограничений?
  5. Перечень поддерживаемых умолчаний, ограничений, правил?
  6. Способы назначений умолчаний, ограничений, правил
  7. Что представляют собой Null-значение?
  8. Свойство колонки IDENTITY?