Физически модели на данни (вътрешно ниво). Създаване и използване на настройки по подразбиране, ограничения и правила с T-SQL Стойността, съответстваща на ключа, не е зададена

За какво е тази статия

Тази статия продължава поредицата от статии „Първи стъпки в разработката на 1C“. Разглеждат се принципите на работа с генерични колекции. След като прочетете статията, ще знаете:

  • Какво представляват генеричните колекции, кога и в какви случаи трябва да се използват?
  • Какво е общото между всички универсални колекции? Какви техники могат да се използват за работа с всички тях?
  • Какво е масив, как и кога да го използваме? Какви методи има?
  • Защо да използвате структура? Как се различава от масив?
  • Кога да използваме списък със стойности? Как да го покажа във формуляра?
  • Съответствие – какво е това и кога да го използваме? Какви са предимствата по отношение на структурата?
  • За какво се използва таблица със стойности? Как да опишем неговата структура? Как да добавя/премахвам редове? Как да го доведа до формата?
  • Стойностно дърво - за какво се използва? Как се попълва и показва във формуляра? Как да работим с него?

Приложимост

Статията разглежда платформата 1C:Enterprise 8.3 от текущото издание.

Как да работите с универсални колекции в 1C

Колекция от стойности е вид контейнер, който обикновено може да съдържа произволен брой елементи. В същото време често няма строги ограничения за типа данни.

Можете да добавяте стойности към обща колекция. Всички стойности в колекцията могат да бъдат обхождани. Тези колекции се използват главно за някакъв вид обработка в алгоритми. Тези. това са някои динамични структури, които съществуват по време на алгоритъма.

Важно е да се разбере, че колекциите не се съхраняват в базата данни (не говорим за типа данни Value Store, който може да съхранява почти всеки тип данни).

Съществуват различни видовеобщи колекции: масив, структура, картографиране, фиксиран масив, таблица със стойности, таблична части т.н. Но всички колекции имат подобно поведение.

Колекция може да бъде създадена в резултат на някаква функция (функцията връща обща колекция като стойност).

На разположение нова колекцияръчно чрез извикване на конструктора и създаване на екземпляр на класа.

Например: OurArray = Нов масив;

Конструкторите за много общи колекции са параметризирани.

И така, в конструктора за можете да посочите броя на елементите в съответните размери. Тези. можете веднага да декларирате многоизмерен .

Съответното описание на конструктора е в помощния синтаксис.

По този начин, като използвате параметрите на конструктора, можете веднага да зададете желаното поведение на този обект.

Но параметрите не са задължителни, разработчикът не може да ги задава и допълнително да дефинира поведението на масива, както намери за добре.

Почти всяка обща колекция може да бъде създадена с помощта на конструктор (с изключение на tableparts, които действат като конфигурационни обекти).

За генеричните колекции има общи понятиякато индекс и номер. Всеки елемент от колекцията има индекс. Индексът започва от нула.

За достъп до елемент Нашият масив, можете да използвате достъп до индекс, за това индексът е посочен в квадратни скоби.

Например, Нашият масив. Обърнете внимание, че в този случай системата връща елемента от масива с индекс 3 и по ред това е четвъртият елемент от масива.

За някои колекции съществува и концепцията за номер на ред. Номерът на реда започва с единица. Например за таблична секция има такова свойство като номер на ред. Важно е да се има предвид, че ако знаем номера на реда и искаме да осъществяваме достъп по индекс, тогава стойността, която е с едно по-малка от номера на реда, трябва да се използва като индекс.

Концепцията за номер на ред не съществува за всички колекции, но главно за тези, които могат да бъдат показани в потребителския интерфейс.

За всички колекции се използва обхождане на елементите на колекцията. Байпасът е възможен по два начина: цикъл Заи цикъл За всеки.

За повечето общи колекции се прилагат следните методи: преброяване, индексиране, добавяне, вмъкване, изтриване и намиране.

Count е функция, която връща броя на елементите в колекция. Може да се използва преди цикъла За, както е показано на фигурата.

Методът Index не съществува за всички колекции, а само за тези, чиито елементи могат да бъдат препратени. Пример е Таблица със стойности.

Таблица със стойностие специфична колекция от низове, низовете могат да съдържат различни колони с различни видовестойности.

Всяка линия е независима единица. Можете да получите връзка към него, чрез този ред можете да получите достъп до стойностите на колоните в този ред.

Методът Index ви позволява да определите кой индекс съответства на даден ред (т.е. текущата позиция на реда в таблицата). Стойностите на индекса започват от нула.

Методи за добавяне на нови стойности към тази колекция съществуват в почти всички универсална колекция. Фигурата показва как да попълните масив със стойности от 0 до 10 по два начина.

За да добавим елемент към масив, можем да използваме метода Добавете, посочете добавената стойност в скоби. В този случай стойността ще бъде добавена в края на списъка, т.е. Масивът постоянно ще се увеличава поради последната позиция.

Друг метод, който ви позволява да добавяте стойности към колекция, е методът Поставете. Различава се от метода Добавететака че да можете да посочите къде да вмъкнете добавения елемент.

Синтаксис: Вмъкване (,)

Първият параметър указва индекса, в който ще бъде вмъкната новата стойност. Тези. ние, например, можем да посочим, че всяка стойност трябва да бъде вмъкната в началото на списъка (вторият начин на фигурата по-горе).

Методът се използва за премахване на елементи от колекция. Изтрий. В метода Delete се указва с индекс кой елемент ще изтрием.

Синтаксис: Изтрий()
Пример за употреба: Нашият масив.Изтрий(5);

Трябва да се отбележи, че за тези колекции, където низовете представляват независим обект (например for TableValues), можем също да използваме метода get index, за да премахнем дадения ред по-късно.

Почти всички колекции имат метод за намиране на стойност - намирам. На метода се предава стойността, която искаме да намерим. В някои колекции можете да поставите всякакви ограничения.

Например в Таблица със стойностиможете да посочите онези редове, тези колони, в които искате да търсите.

Ако стойността бъде намерена, този метод връща индекса или конкретен низ. Ако не бъде намерена стойност, се връща стойност тип. Недефиниран. Когато се приложи към масив, връща Индекс, или стойността Недефиниран.

Пример за употреба: OurVariable = OurArray.Find(8);

Генеричните колекции могат да бъдат изчистени много бързо, т.е. премахнете абсолютно всички елементи. За това се използва методът ясно(), който премахва елементите на масив, низове TableValues, или данни от други колекции.

Допълнителни методи за масив

Метод Bboundary()връща броя на елементите минус едно. Тези. ако използваме цикъл За, тогава вместо метода Quantity можем веднага да използваме метода Границата().

По-специално, променливата NumberInArray може да бъде дефинирана по различен начин:

NumberInArray = OurArray.InBorder();
След това, когато се описва самият цикъл, не трябва да се изважда от тази променлива.

Методът Set ви позволява да присвоите стойност на елемент от масив по индекс.

Синтаксис: Инсталирай(,)

Пример: OurArray.Set(2,8);

Алтернативен вариант: Нашият масив = 8;

Можете да използвате метода за масив Вземете, за да прочетете стойността в индекса, без да прибягвате до използването на квадратни скоби.

Синтаксис: Вземи()

Пример: OurVariable = OurArray.Get(2);

Алтернативен вариант: OurVariable = OurArray;

Универсална структура на колекцията

Структурата, подобно на масива, може да има неограничен брой елементи, но съдържанието на елемент се различава от масива.

Структурата е колекция, всяка стойност от която се състои от двойка. Първият елемент от двойка се нарича Ключ. Вторият елемент на двойката е Значение.

Ключе строго низов тип данни, който описва стойност. Например, ключ"Код" може да съответства на стойността 113; ключ„Име“ означава „Вася“. Няма ограничение за тип данни за самата стойност.

Структурата е много удобна за използване, ако искаме да създадем списък с параметри. Ако това СтруктураНаречен Нашата структура, тогава ще се позоваваме на неговите две стойности, както следва: OurStructure.Code и OurStructure.Name.

Подобно обжалване е много по-удобно, отколкото ако дефинираме всички параметри в масив и имаме достъп до тях по индекс.

Структурата прави програмния код четим (разбираем). Структурата се използва доста често, много по-често от масива.

Използва се за описание на някои параметри, които често са доста големи във всички алгоритми.

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

Тогава е много по-удобно да запишете всички параметри в структурата и да я предадете. Тези. има "опаковане" на параметри на процедури и функции.

Отделно трябва да се отбележи, че като ключне може да се появи абсолютно всеки низ в структурата. Прилагат се определени ограничения.

Ключтрябва да действа като идентификатор. Това означава, че в ключне трябва да има интервали и не може да започва с число.

Допустимо начало ключс буква или долна черта. По този начин, Ключтрябва да отговаря на изискванията за създаване на идентификатори.

Нека отбележим как структурата се различава от масива. Структурата има метод Поставете, масивът има два метода за вмъкване: Поставете(до определена позиция) и Добавете(в края на списъка). В масива всички елементи са подредени.

Структурата е вид неподреден набор. Ето защо има само метод за вмъкване за Struct.

Стойността се вмъква не на конкретна позиция, а в посочения набор. Структура не може да бъде препращана чрез индекс, както други генерични колекции.

Елементите на Структурата се обозначават само с името на Ключа. Въпреки това цикълът For each of работи и за структурата, но не трябва да разчитате на реда на елементите на структурата.

Структурата се създава по същия начин като другите генерични колекции, като се използва конструкторът New, като се указва типът данни Structure.

Подобно на масив, конструкторът на структура може да има параметри. Тези. възможно е да се опише съдържанието на самата структура с помощта на конструктор.

За разлика от масива, където можете просто да посочите броя на елементите за всички измерения, в структурата е възможно да зададете самото съдържание.

Например: OurStructure = Нова структура("Код,Име", 133, "Вася");

Първо се изброяват имената на ключовете, разделени със запетаи, а след това, съответно, в същата последователност, стойностите на параметрите.

За да добавите нова стойност към структурата, има метод Поставете, който вмъква нова двойка (ключ и стойност).

Например: OurStructure.Insert("Членове на семейството",3);

Структурата се характеризира с друг метод, който се използва доста често. Това е методът Имот.

Използвайки този метод, можете да разберете дали има такъв елемент в тази структура, за който ключът има такова и такова име.

Ако такъв елемент съществува, системата ще върне True, в противен случай ще върне False.

Например изразът OurStructure.Property („Членове на семейството“)ще бъде равно на True. Този метод се използва доста често при анализа на структурата.

Както при всяка универсална колекция, достъпът до свойствата на структурата е разрешен чрез индекс. Но индексът за структурата е стойност на низ.

Например: Доклад(Нашата структура["Членове на семейството"]);

Не бива обаче да забравяме, че структурата не е подреден набор от обекти, поради което достъпът с индекси 0, 1, 2 е неприемлив.

Списък със стойности на обща колекция

Списък със стойностие линеен списък от елементи от произволен тип данни.

Всеки елемент се състои от няколко стойности. Схематично списък със стойности може да бъде представен като списък с четири колони.

Първа колона - марка. Той има булев тип данни и позволява на потребителя или да поставя отметки в квадратчетата, или да ги премахва.

Другата колона е картина, която по някакъв начин може визуално да изобрази този елемент, т.е. съпоставете тази линия с всяка снимка.

Третата колона е самата съхранена стойност, т.е. това е всеки тип данни и може да бъде различен в различните редове.

Четвъртата колона е изгледът, т.е. това е някакво низово описание на дадената стойност. Изгледът ще се показва на потребителя, когато разглежда този елемент. В този случай, ако изгледът не е зададен, системата ще се опита да получи изгледи за елемента, съдържащ се в тази позиция.

Списък със стойности- това е обектът, с който потребителят може да работи визуално. Тези. Списък със стойностимогат да бъдат показани във формуляра.

Потребителят може да извършва някои действия с него. Освен това, Списък със стойностимогат да бъдат изведени независимо с помощта на методи, т.е. показват на екрана в някой клон на алгоритъма (с изключение на код на сървъра), така че потребителят да избере ред или да постави отметки в някои квадратчета.

Да намерим Списък със стойностив Sitax Helper. Конструктор Списък със стойностине е параметризиран (не могат да се задават стойности по подразбиране).

Има методи като:

  • Вмъкване(,) ;
  • Добавяне (,);
  • Количество();
  • Индекс().

Има и специални методи, напр. UnloadValues(). Това създава масив, в който се копира списъкът със стойности. Например:

ArrayElements = ListPriceTypes.UnloadValues();

Има и обратен метод:
PriceTypeList.LoadValues(ElementsArray);

Има методи за търсене:
FindByValue(); FindByIdentifier().

Има метод за копиране:
CopyList = ListPriceTypes.Copy();
Този методима за цел да направи някакъв вид модификация с копие.

Има методи:
Сортиране по стойност();
SortByView().

Методи Избери предмет(,)и MarkItems()извикване на модален диалогов прозорец, който спира изпълнението на алгоритъма, докато потребителят не затвори този прозорец.

За да използвате тези методи в свойствата на конфигурацията Режим на използване на модалносттатрябва да се настрои на Използвайте.

Примерен код, извикан от модул за управлявано приложение:

Показване на този код в потребителски режим (модален диалогов прозорец).

По-долу Списък със стойностиизползван като наличен тип данни за атрибута на формуляра. Създаваме нов атрибут за формуляра за обработка, определяме типа за него Списък със стойностии го покажете във формуляра.

Ние създаваме нов отбор StoreGifts, прехвърлете го във формуляра и дефинирайте манипулатор на действие за него.

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

Ако желаете, списъкът може да бъде редактиран: добавете някои елементи, премахнете някои.

Съответствие с универсалното събиране

Тази колекция е много подобна на Структура. Точно като структура, съвпадението е набор от стойности, който се състои от ключ и самата стойност.

Основната разлика е, че всеки тип данни може да бъде определен като ключ, както и като стойност. С оглед на тази функция е необходимо да се осъществи достъп до стойността на съвпадението по индекс, стойността на ключа е посочена като стойност на индекса.

Ключът може да бъде тип данни, различен от низ. Свойствата и методите за работа с Matching са почти същите като тези на Structure.

Конструкторът за съвпадение, за разлика от структурата, не съдържа възможност за указване на параметри.

Пример за употреба:

Кореспонденцията е полезна, когато е необходимо да се свържат две структури. Например всеки ред от табличната част трябва да бъде съпоставен с ред от таблицата със стойности.
В този случай редът от табличния раздел се използва като ключ за съответствие и се посочва съответната стойност.

Когато вмъквате елементи в колекция Match, различна от метода вмъкване(,)Има и друг начин за вмъкване на стойност и той е да използвате нормалния оператор за присвояване.

Например: OurMatch = Ново съвпадение;
Съвпадение = 999;

Тези. ако елементът не присъства в колекцията, тогава той ще бъде добавен с помощта на оператора за присвояване и ако присъства, ще бъде актуализиран.

Това е различно от структурата.

Обща колекция Таблица със стойности

Таблица със стойностие таблица с произволен брой редове и произволен брой колони. Пресечната точка може да съхранява стойности от всякакъв тип данни. Ако е необходимо, колоните могат да бъдат въведени, т.е. да се определи в коя колона кой тип данни се съхранява.

Можете да оставите колоните без тип, тогава същата колона в различни редове може да съхранява стойности от различни типове.

Разлики TableValuesот 2D масив:

  • това е обект, с който потребителят може да работи (таблицата със стойности може да се покаже на екрана, потребителят може да я попълни, в бъдеще въведените данни могат да бъдат прочетени);
  • изграждане на индекси за бързо търсене;
  • клониране, запълване на цялата колона с определена стойност, разтоварване на всички колони в масив.

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

Така, Таблица със стойностисе състои от набор от редове и набор от колони. Както редовете, така и колоните са колекции.

Тези. вътре в колекцията Таблица със стойностиима още две колекции. Нека се обърнем към асистента за синтаксис и да намерим Таблица със стойности.

Поддържани типове данни: себе си Таблица със стойности, който се състои от низове. Всеки ред е представен от тип данни RowTableValues, който има свои собствени свойства и методи. На разположение CollectionColumns TableValuesсъщо има определени свойства.

Важен момент! Процедурата, която генерира Таблица със стойности, трябва да компилира & OnServer.

Преди да започнете работа с Таблица със стойности, трябва да определите кои колони ще съдържа (т.е. да ги създадете). Синтаксис:

Добавяне(,)
(по избор)
Тип: низ.
(по избор)
Тип: Типове описания
(по избор)
Тип: низ.
(по избор)
Тип: Номер.

Например:

За да извикаме тази процедура, ще използваме командата.

В описание TableValuesкато елементи от колекцията са точно Редове Стойности на Таблица.

За разлика от колоните, които се състоят само от свойства (Име, Тип, Заглавие, Ширина), в RowTableValuesима както свойства (препратка по име на колона), така и методи (можете да получите и зададете стойност, да работите със собственици).

Добавям нова линиякъм таблицата, трябва да използвате и метода Добавяне(), или вмъкване(). Във втория случай трябва да посочите на коя позиция да бъде поставен желаният низ.

За да присвоим стойност на колона, ние я наричаме с името на колоната или индекса (използвайки квадратни скоби), разделени с точка.

За пълнене TableValuesмогат да се използват следните методи:

ясно()- за премахване на всички редове от TableValues.

FillValues(,)– позволява ви да попълните всички колони или избрани колони с една стойност.
Зареди колона(,)– зарежда колона от масив.
UnloadColumn()– разтоварва колона в масив.

Последните два метода са полезни, когато трябва да преместите колона от една таблица със стойности в друга.

Копие(,)- позволява ви да създадете нова таблица на базата на съществуваща таблица Таблица със стойности, като посочва не всички редове и всички колони, а само някои от тях. Върната стойност - Таблица със стойности.

Можете да копирате структурата TableValues. За това има съответен метод. Копиране на колони (). Ще получим празен Таблица със стойностис желаната структура.

AT Таблица със стойностиима метод обща сума(). Можете да посочите колоната, в която искате да сумирате числените стойности. По отношение на показания по-рано код в Tableau, можете да изчислите стойността: TK.Total(„Сума“).

AT Таблица със стойностивъзможно е да се групират (свият) числови стойности по същите стойности на определени колони, като се използва методът свиване(,).

По отношение на показания по-рано код в Tableau, можете да изчислите стойността: TK.Collapse(“Ден от седмицата”, “Сума”).

Таблица със стойностиможе да се покаже на екрана на потребителя, така че да можете да извършвате всякакви действия с него. Но за разлика от Списък със стойностиот програмния код, не можете просто да извикате таблицата на екрана.

За показване Таблица със стойностина екрана създайте атрибут на формуляр и му задайте тип данни Таблица със стойности.

След това получената таблица трябва да се покаже на формуляра.

В модула формуляр, в края на предварително компилирания алгоритъм (в процедурата за създаване на таблица със стойности), добавете:
ValueVFormData(TK, Таблица);

Генерично колекционно дърво на ценностите

универсална колекция, която е много подобна на Таблица със стойности. Разликата от таблицата е, че редовете на дървото могат да бъдат подчинени един на друг, т.е. може да се образува някаква йерархия.

Може да се показва и на екрана. Дървото на стойностите изрично се състои от колекция от редове и колекция от колони. В дървото има две свойства, редове и колони.

Тъй като редовете могат да бъдат подчинени един на друг, тогава за всеки ред може да се посочи родител, както и редове, подчинени на него.

Нека създадем подходящата команда Tree и нейната процедура за обработка.

Да творим в който има един родителски ред и два подчинени реда.

Създайте атрибут на формуляр DerZn(тип данни - Дърво на стойностите).

За този атрибут ще създадем колоните Година и Месец.

Преместете съответния елемент DerZnкъм формата.

В края Процедури TreeOnServer()добави:

ValueVFormData(TreeZn, DerZn);

Нека да проверим какво се е случило в потребителски режим.

С копче Добаветеможете да добавите нови редове. Те също могат да образуват йерархия.

За да преминем през всички елементи на дървото на стойностите, трябва да използваме рекурсия, т.е. извикване на процедура от себе си. Например обработката на дърво със стойности може да изглежда така:

С това приключваме първото ни запознаване с универсалните колекции.

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

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

Стойността на блоковия ключ е минималната ключова стойност на записите, включени в блока. Блоковата последователност е последното ниво на B-дървото. Изгражда се индекс на предишното ниво. Записите от това ниво съдържат стойността на ключа на блока от следващото ниво и адреса на указателя на връзката на съответния блок; записите от това ниво също се комбинират в блокове (k записа всеки). След това по подобен начин се изгражда индекс от по-високо ниво и така нататък, докато броят на записите в индекса на определено ниво не е повече от k.

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


Ориз. 9.7.

Блоковете съдържат ключовата стойност на съответния блок. Стойността на k се приема равна на 2.

Чрез изграждане на B-дърво всички изходни записи са на едно и също разстояние от горния индекс (дървото е балансирано).

Нека разгледаме изпълнението на основните операции.

Търсене и четене на запис от зададена стойностключ

Горният индекс се чете. Сравнете дадената ключова стойност с ключовата стойност последно влизанеиндекс. Ако зададената стойност на ключа е по-голяма или равна на стойността на ключа на следващия запис в индекса (ако такъв запис съществува), тогава блокът от записи в индекса от следващото ниво се чете на адреса на връзката, указан в текущия запис. След това процесът се повтаря.

Предполагаме, че всички блокове са разположени в VP. Тогава броят на обажданията към VI при търсене на информация ще бъде равен на броя на нивата на дървото. Броят на нивата на дървото е равен на минималната стойност l , при която е изпълнено условието k l >= N (N е броят на логическите записи).

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

След търсене и прочитане на записа се променят регулируемите полета. Ако не е ключът на записа, който се коригира, тогава модифицираният запис се поставя на негово място. Ако стойността на ключа се промени, старият запис се изтрива (в съответния блок се появява "празен" запис), а променения запис се въвежда по същия начин като новодобавения.

Изтриване на запис

След търсенето намереният запис се изтрива (в съответния блок вместо този запис се въвежда "празен" запис).

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

На първо място се определя къде трябва да се намира добавеният запис с дадена стойност на ключ. Процедурата за намиране на блока, в който трябва да се намира този запис, е подобна на описаната по-горе процедура за намиране на записи с дадена стойност на ключ. Ако в открития блок от по-ниско ниво има „празен“ запис, добавеният запис се добавя към този блок (с необходимото пренареждане на записите в блока).

Ако в съответния блок от по-ниско ниво няма празно място, блокът се разделя на два блока. Записите се въвеждат в първия от тях, останалите се въвеждат във втория. Ключовата стойност на всеки от посочените блокове ще бъде, както беше описано по-рано, минималната стойност на ключовете на записите, включени в блока. Добавяният запис се въвежда в блока, чиято стойност на ключ е по-малка от стойността на ключа на добавяния запис. Появата на нов блок с нова стойност на ключ налага формирането на подходящ нов входв индекса на предишното ниво. Този запис съдържа новата ключова стойност на новия блок и указател към неговото местоположение. Процедурата за добавяне на такъв запис е подобна на описаната по-горе. Блокът от предишното ниво се намира там, където трябва да бъде поставен този запис. Ако в блока има празно място, записът се добавя към блока, ако блокът е пълен, той се разделя на два блока, записът се въвежда в един от блоковете, формира се индексен запис от предишното ниво , и така нататък.

Възможен е вариант, когато трябва да разделите блока на Най-високо нивои образуват друго ниво на дървото.

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

1. Сравнение на първо ниво.

Движение по левия клон.

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

Движение по левия клон.

3. Сравнение на трето ниво.

Движение по десния клон.

Желаният блок

4. Блокът е пълен.

Разделен е на 2 блока

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

В блок 1 се въвежда запис с ключ 10

На най-ниското ниво се е появил нов запис със стойност на ключ 12. Необходимо е да добавите нов запис с ключ 12 и указател към записа от най-ниското ниво към индекса на предходното ниво.

5. Към блока трябва да се добави запис с ключ от ниво 3 от 12. Блокът е пълен, разделен е на два блока

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

Записът се добавя към втория блок

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

7. Към блока трябва да се добави запис с ключ от ниво 2 от 8. Блокът е пълен, разделен е на два блока.

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

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

Настройки по подразбиране, ограничения и правила - това са незадължителни атрибути, които могат да бъдат дефинирани в колони и таблици на базата данни. При тишина(стойности по подразбиране) - това са стойностите, които се въвеждат в определена колона. Ограничения(ограничения) се използват като начин за идентифициране на валидни стойности за колона (за отхвърляне на невалидни стойности), както и средство за гарантиране на целостта на данните в таблиците на базата данни и между свързаните таблици. Ограничение само върху една колона се нарича ограничение на стойност (колона): то ограничава стойностите само на тази колона. Ограничение, което засяга множество колони, се нарича референтно ограничение: в този случай комбинацията от стойности за колоните, посочени в ограничението, трябва да отговаря на изискванията на ограничението. Има пет вида ограничения: NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY и CHECK.

Нулева стойност(нулева стойност) е неизвестна стойност, за която се прилага нотацията NULL . Нулева стойност в колона обикновено означава, че няма данни за реда на тази колона, защото стойността е неизвестна или няма смисъл, не е зададена или ще бъде зададена в бъдеще. Нулевите стойности не са празни стойности и не са стойности на числото 0, техните реални стойности са неизвестни (неизвестни), така че няма две нулеви стойности, които да са еднакви.

ИДЕНТИЧНОСТ Имот. Когато създавате таблица, можете да посочите една от колоните като колона за идентичност, като добавите свойството IDENTITY към дефиницията на колона. Ако колона е създадена със свойството IDENTITY, тогава SQL Server автоматично генерира стойност на ред за тази колона, изчислена от началната стойност и стойността на нарастване. Началната стойност е идентификационната стойност за първия ред, вмъкнат в таблицата. Увеличението е количеството, с което SQL Server увеличава стойността на самоличността за последователни редове. Всеки път, когато се въведе ред, SQL Server присвоява текущата стойност на идентичност на елемента от данни в колоната за идентичност, въведена в новия ред. Следващият въведен ред ще получи стойност за идентичност, която е по-голяма от текущата максимална стойност за идентичност със стъпка. Колоните за идентичност обикновено се използват в ограниченията на първичния ключ на таблици, които позволяват редовете да бъдат уникално идентифицирани. Например, ако зададете IDENTITY(1, 10), тогава стойността на идентифициращата колона за първия въведен ред ще бъде 1, за втория ред ще бъде 10, за третия ред ще бъде 20 и т.н. . Ако не посочите начална стойност или увеличение, те ще използват своите стойности по подразбиране от 1 и 1. Колоните за идентичност не могат да съдържат стойности по подразбиране и не им е позволено да бъдат нулеви. Всяка таблица може да има само една идентифицираща колона.


По подразбиране идентификационните колони не могат да се въвеждат директно и не могат да се променят. Ако искате да въведете отново изтрит низ и искате да запазите старата идентифицираща стойност на този низ, тогава можете да замените настройката по подразбиране, като използвате този оператор:

SET IDENTITY INSERT table.name ON

С този оператор можете да вмъкнете ред и да зададете стойността на идентифициращата колона, от която се нуждаете. Когато приключите с въвеждането на низа, трябва да премахнете възможността за вмъкване в колоната за идентифициране, като използвате следния оператор:

SET IDENTITYINSERT table_name OFF

След това SQL Server ще вземе най-голямата стойност от тази колона като първоначална стойност, използвана при добавяне на следващите редове.

Създайте настройка по подразбиранеза колона с помощта на оператора CREATE TABLE е предпочитаният стандартен метод. Следният оператор създава таблица в базата данни MyDB, съдържаща стойностите по подразбиране и за двете колони, колона A (от тип char) и колона B (от тип int):

СЪЗДАВАНЕ НА ТАБЛИЦА MyTable

(columnA char(15) NULL DEFAULT "pcs",

columnB int NULL ПО ПОДРАЗБИРАНЕ 0)

Стойността по подразбиране "pcs" за колона columnA е съвместима с типа данни char на тази колона, а стойността по подразбиране 0 за columnB е съвместима с типа данни int. Ако конкретна стойност не е посочена за една или двете колони при вмъкване на нов ред в таблица, тогава се използва подходящата стойност по подразбиране. Следователно единственият начин да присвоите NULL на тези колони е изрично да вмъкнете NULL. Нулевите стойности са валидни, тъй като атрибутът NULL е посочен и за двете колони. Ако колоните са дефинирани като NOT NULL, тогава не можете изрично да вмъкнете NULL стойност.

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

CREATE TABLE клиент

midinit char(1) NULL,

фамилно_име char(20) NOT NULL,

Custom_phone char(10) NULL)

Като алтернатива можете да наименувате това ограничение, като добавите ключовата дума CONSTRAINT. За да присвоите името PK_SSN на вашето ограничение PRIMARY KEY, използвайте следния оператор:

CREATE TABLE клиент

(първо_име char(20) NOT NULL,

midinit char(1) NULL,

фамилно_име char(20) NOT NULL,

SSN char(11) ОГРАНИЧЕНИЕ PK_SSN PRIMARY KEY,

cust_phone char(10) NULL)

Можете също така да посочите ограничение PRIMARY KEY, след като всички колони в таблицата са дефинирани. Когато използвате този синтаксис, името на колоната трябва да бъде оградено в скоби и посочено след клаузата CONSTRAINT, както е показано в следния израз:

CREATE TABLE клиент

(първо_име char(20) NOT NULL,

midinit char(1) NULL,

фамилно_име char(20) NOT NULL,

cust_phone char(10) NULL,

ОГРАНИЧЕНИЕ PK_SSN ПЪРВИЧЕН КЛЮЧ (SSN))

УНИКАЛНО ограничениегарантира, че не се допускат дублиращи се стойности в колона или набор от колони; с други думи, уникалността на стойностите в тази колона или набор от колони е осигурена. За да поддържа тази уникалност, SQL Server създава по подразбиране уникален индекс на колоната или колоните, посочени в ограничението UNIQUE. Ограничение UNIQUE може да се използва за всяка колона, която не е част от ограничение PRIMARY KEY. Ограничение UNIQUE може да се използва за колони, които позволяват нулеви стойности, докато ограниченията PRIMARY KEY не могат да се използват за такива колони. Колона с ограничение UNIQUE може да бъде реферирана от ограничение FOREIGN KEY. Множество UNIQUE ограничения могат да бъдат зададени на една таблица, стига общият брой на индексите за тази таблица да не надвишава 250 индекса.

За да създадете УНИКАЛНО ограничение на таблица с помощта на T-SQL, използвайте оператора CREATE TABLE. Например следният оператор създава клиентска таблица с УНИКАЛНО ограничение на SSN колоната като индекс:

CREATE TABLE клиент

(първо_име char(20) NOT NULL,

midinit char(1) NULL,

фамилно_име char(20) NOT NULL,

SSN char(11) NOT NULL UNIQUE CLUSTERED,

cust_phone char(10) NULL)

Ограничение CHECKсе използва за ограничаване на набора от разрешени стойности за колона до определени стойности. Стойностите, които се използват при вмъкване в колона или актуализиране на колона, се проверяват спрямо истинността (стойност TRUE) на булевото условие за търсене, посочено в ограничението. Например, ако искаме да ограничим диапазона от възможни стойности, разрешени за ценовата колона на таблицата с артикули до между $0,01 и $500,00, ще използваме следния израз:

CREATE TABLE елементи

(име на елемент char(15) NOT NULL,

itemid smallint NOT NULL IDENTITY(1,1),

цена smallmoney NULL,

item_desc varchar(30) NOT NULL DEFAULT "няма",

ОГРАНИЧЕНИЕ PK_ itemid ПЪРВИЧЕН КЛЮЧ (itemid),

ОГРАНИЧЕНИЕ CK_price ПРОВЕРКА (цена >=0,01 И цена<= 500.00))

Създаване и модифициране на ограничения с помощта на Management Studio

За да създадете таблица, разгънете папката на сървъра и папката на базата данни в левия панел на Management Studio, щракнете с десния бутон върху папката Tables и след това изберете New Table от контекстното меню. За да покажете прозореца Design Table за съществуваща таблица, първо щракнете върху папката Tables, щракнете с десния бутон върху името на тази таблица в десния панел и след това изберете Design Table от контекстното меню.

За да посочите дали да използвате или не нулеви стойности във всяка колона просто поставете или премахнете отметката от съответното квадратче в колоната Allow Nulls на прозореца Design Table. Можете да зададете тази опция, когато създавате таблица или когато я променяте.

За създаване или модифициране УНИКАЛНО ограничение използвайки Management Studio, изпълнете следните стъпки:

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

  1. Ще се появи следният прозорец, който ви позволява да създавате, редактирате и изтривате ограничения, свързани с първични и уникални ключове

Изберете имената на колоните, които искате да включите в ограничението, и дефинирайте свойства за него.

Можеш да питаш Ограничение PRIMARY KEY една колона или няколко колони. Тази колона или колони трябва уникално да идентифицират всеки ред в таблицата. За да зададете ограничение на PRIMARY KEY, изпълнете следните стъпки:

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

  1. Щракнете с десния бутон върху една от избраните колони и изберете Задаване на първичен ключ от контекстното меню. Ще се появи изображение на малък ключ отляво на колоните, които сте дефинирали за първичния ключ.
  2. Ако трябва да преместите ограничението PRIMARY KEY в друга колона, просто задайте тази нова колона като първичен ключ. Не се изисква първо изрично да изтриете оригиналния първичен ключ - SQL Server ще изтрие и пресъздаде индекса PRIMARY KEY вместо вас. Можете също така да промените индекса PRIMARY KEY в прозореца Properties. Вашите промени ще влязат в сила, след като запазите работата си, като щракнете върху бутона Запиши в лентата с инструменти.

Да създам Ограничение CHECK като използвате прозореца Design Table, отворете този прозорец за таблицата, с която искате да работите, и следвайте стъпките по-долу.

1. Щракнете с десния бутон върху прозореца Design Table и изберете Properties от контекстното меню, за да покажете прозореца Properties. Щракнете върху раздела Проверка на ограниченията и щракнете върху бутона Нов за таблицата.

3. Обърнете внимание на трите квадратчета за отметка в долната част на този прозорец. Поставянето на отметка в квадратчето Проверка на съществуващи данни при създаване означава, че съществуващите данни в таблицата ще бъдат проверени спрямо ограничението CHECK и ако не съвпадат, ограничението няма да бъде създадено. Поставянето на отметка в квадратчето Налагане на ограничение за репликация означава, че това ограничение ще се проверява, когато данните се репликират. Поставянето на отметка в квадратчето Налагане на ограничение за ВМЪКВАНИЯ и АКТУАЛИЗАЦИИ просто означава, че ограничението ПРОВЕРКА ще бъде активирано. Ако не поставите отметка в това поле, тогава това ограничение ще бъде създадено, но няма да бъде активирано, т.е. няма да има ефект.

4. Щракнете върху бутона Затваряне и след това върху бутона Запазване, за да запишете новото ограничение. За да промените ограничение CHECK, използвайте раздела Проверка на ограничение, за да промените името на ограничението, израза на ограничението и флаговете.

Можете също да използвате раздела Проверка на ограниченията, за да премахнете ограничение CHECK, като изберете името на ограничението, което искате да премахнете, от списъка Избрано ограничение и щракнете върху бутона Изтрий.

Лабораторна работае предназначен за 3 часа уроци в класната стая и се състои в изучаване на теоретичен материал и придобиване на практически умения за дефиниране на таблици на бази данни, създаване на правила, ограничения, настройки по подразбиране, потребителски типове данни, индекси. Провеждането на лабораторната работа се състои в отговаряне на контролни въпроси и демонстриране на индивидуална задача на компютър.

  1. Заглавие и цел на работата
  2. Индивидуална задача
  3. Скриптове за създаване на персонализиран тип данни и таблици на база данни, в съответствие с индивидуална задача

тестови въпроси

  1. Списък на поддържаните типове данни?
  2. Персонализиран тип данни. Цел и методи на създаване?
  3. Начини за дефиниране на таблици?
  4. Задаване на настройки по подразбиране, правила и ограничения?
  5. Списък на поддържаните настройки по подразбиране, ограничения, правила?
  6. Методи за задаване на настройки по подразбиране, ограничения, правила
  7. Какво е нулева стойност?
  8. Свойство на колона IDENTITY?

n. (pzegt (pape пъти (K, h))

Вмъква стойността на h в обекта n на позиция, обозначена с ключ 1c.

Ако вече има ieuportable стойност, съответстваща на ключ 1c, тогава тя не се променя. Връща обект от тип pamphlet::stringtor, boo1>, чийто първи компонент сочи към елемента с даден ключ, а вторият показва дали е вмъкнат нов елемент. Обърнете внимание на факта, че според десния валс, pa1 r генерира обект от тип pa(r sk, h ”, който се преобразува след началото на функцията snzegm в обект от тип raz r

p.uzpb (1s)

Връща pterator, който се свързва с елемента (ако има такъв), обхванат с ключ 1c. Ако не съществува такъв елемент, връща стойността на n.enb0 Генерира обект tyne пъти r, който прехвърля ключа и стойността, с която този upoch е обединен, на позицията, посочена от итератора me. Така елементът me->r(gm е от тип conn k и prgl задава ключа, а елементът me->jesnb е от тип y и prgl задава стойността, съответстваща на този ключ

Б З. Алгоритми

Stud библиотеката включва много общи алгоритми, които са написани с мисъл за итератори; по този начин алгоритмите стават независими от конкретните структури от данни, с които работят, и типовете на техните членове. Обърнете внимание, че асоциативните контейнери имат итератори, които се отнасят до съставни типове като класа pa(r. Сляпо, използването на тези алгоритми с асоциативни контейнери изисква внимателно проектиране.

Повечето алгоритми се фокусират върху последователности, ограничени от двойка итератори, като първият итератор сочи към първия елемент, а вторият сочи към областта на паметта, разположена след последния елемент от този последващ елемент. Освен ако не е отбелязано друго, всички алгоритми са дефинирани в заглавката.

Включва декларации на общи алгоритми

accppite(b, e, t)

accipate(b, e, t, r)

Дефлирана в заглавието. Създава временен обект o1y от същия тип и със същата стойност като обекта m. За всеки вход на итератор me в диапазона (b, e), изчислява ady" = aby + *mt или aby" = T(ab) ", *3m), в зависимост от формата на извиканата функция accppplate. Резултатът е копие на обекта aby. Имайте предвид, че тъй като операторът "+" може да бъде претоварен, дори първата форма на функцията accpplyate може да работи на невградени типове тип arithmeticguskill Например, можем да използваме алгоритъма Assppp1ate, за да свържем всички низове в копиращото устройство

Б З. Алгоритми

b(не~y sevgsp(b, e, c)

Връща стойност от тип boo1, указваща дали стойността c принадлежи към (сортираната) pastlglature, ограничена от еднопосочните итератори b и e

копие (b, e, b)

Копира стойностите на последователността, зададена от входните итератори b и e, в целевата област, наречена итератор d. Връща стойност, която указва позицията зад последния елемент на приемника

epv1(b, e, b2)

epv1(b, e, b2, p)

Експоненциална стойност от тип bao1, показваща дали елементите от порядъка на величината, зададен от входните итератори b и e, са равни на елементите на последователност със същия размер, чието начало е дадено от входния итератор b2. Използва предиката p за тестване или оператора "=", ако предикатът p не е посочен.

H 11(b, e, c)

Задава елементите на слепотата, дадени от кучешките итератори b и e, равни на стойността c. Връща стойността на r(nb(b, e, c)

r(n0 (r(b, e, p)

Връща iterpore, обозначаващ първия итератор на стойност c, или итератор, сочещ към елемента, за който предикатът p е верен (ако е даден) в последователността, дадена от итераторите b и e. Връща e, ако този елемент не съществуват

1ex(condgvr sv1 conpvge(b, e, b2, e2)

1ex(condgvp(c1 conp(b, e, b2, e2, p)

Връща логическа стойност, указваща дали последователността на елементите в диапазона [b, e) е по-малка от последователността на елементите в диапазона [b2, e2). За да сравните елементи, използвайте предиката p или оператора "

pvc (s1, s2)

Връща по-голямата (две pvc функции) или по-малката (по отношение на функциите bnn) стойности, дадени от аргументите c1 и c2, които и двата имат pvc pdig тип e1epeps(b.e) nmp e1epeps(b, e) Връща итератор, сочещ към най-големият (най-малкият) ) елемент в пастелгабилността, даден от еднопосочните елементи на играта b не е

Приложение Б Стандартна библиотека(кратък преглед)