Представяне на данни
Сред изискванията на СУБД са:
-
Атрибутите да бъдат представени като поредица от байтове с фиксирана или променлива дължина, наречени полета.
-
Полетата заедно се организират в набори с фиксирана или променлива дължина, наречени записи
-
Записите се съхраняват във физически блокове. Различните структури от данни са полезни, особено ако блоковете със записи трябва да се организират когато базата от данни се модифицира.
-
Колекция от записи която формира отношение се съхранява като колекция от блокове, наречена файл. За да поддържаме ефикасни заявки и модификации на тези колекции поставяме номер на индексирани структури на файла.
Записите съответстват на кортежи в релационните модели или обекти в обектния модел. Тези записи трябва да се съхраняват в блокове, което се осъществява с помощта на различни структури от данни. Един набор от блокове, в който се съхраняват записи от една и съща релация или клас се нарича файл. Един файл е набор от блокове. За да се търси ефективно се използват индексни структури върху файла (файла в БД е различен от файла в ОС. В операционната система файлът е поредица от байтове и няма структура, в БД е поредица от блокове, в които има организация-индекси и др. ).
Елементи, данни, полета
Елементи – стойностите на атрибутите при релационния или обектно-ориентирания модел. Елементите данни се представят с полета, които се използват за формиране на блокове.
Пример в релационните бази от данни:
CREATE TABLE Movie Star
(Name char (30) Primary key,
Address varchar (255),
Gender char (1),
Birthdate Date)
СУБД взема и създава тази релация. Тя е множество от кортежи, които могат да бъдат разглеждани като записи или структури (в С++). Всеки кортеж се представя като запис, записът заема част от някои блок върху диска и в него всеки атрибут си има по едно поле.
Проблеми:
-
как се представят типовете като полета?
-
как представяме кортежите като записи?
-
как представяме набор от записи (кортежи) като набор от блокове (т.е. къде ще отидат записите от блокове)?
-
как наборите от блокове се използват за съхраняване и представяне на релации?
-
как се оправяме със записи, чиито размери могат да варират за различните кортежи?
-
какво става когато размера на записът се променя? Как се представят големи бинарни обекти?
Обектно-ориентиран модел – как се представят обекти
Обект – кортеж, неговите екземплярни променливи-атрибути. Обектите може да ги представим както представихме кортежите, но има два проблема:
-
обектите могат да имат методи или функции, асоциирани с тях. При обектно-ориентирания модел тези методи и функции са част от схемата.
-
обектите имат идентификатори, уникални в някакво глобално адресно пространство, между обектите има и връзки, които или са указатели или списъци от указатели. Методите се съхраняват заедно със схемата, т.к. те са общи с цялата база от данни.
Във всеки един запис, представляващ обект, има поле, което идентифицира към кой клас принадлежи обекта и какви методи се използват за него. Връзките също са част от обекта, но трябва да се съхраняват с него. Обикновено не се знае вида на връзките. Когато са например много към много не се знае колко да се задели и се получава запис с променлива дължина.
Представяне на данни (как SQL типовете данни се представят като елементи в записа):
-
int – 2-4 байта, float – 4-8 байта. Съхраняват и се разглеждат като поредица от битове, които се интерпретират от хардуера на машината.
-
Символни низове с фиксирана дължина char (n). поредица от n байта (всеки символ се представя с един байт). char (5) c a t_ _
-
Символни низове с променлива дължина varchar (n) представянето става по два начина: или да се задели един байт в началото, който съдържа дължината на цялото поле 3 c a t или да бъде използван специален символ за край c a t \x0.
-
Дата и време – датата е символен низ с фиксирана дължина.
-
Битове bit (n) поредица от битове, извършва се пакетиране по 8 бита (1 байт). bit (12) {1101 1011} {1011 X}
-
Булева стойност - true (1000 0000 или 1111 1111) или false(0000 0000)
-
Изброими типове – имат фиксирано множество от стойности за атрибути {RED,GREEN,BLUE}; {MON,…,SUN}. Множеството от стойности имат символични имена. Стойностите на изброимия тип могат да се представят с числови стойности {0,1,2}; {0,…,6}. Представят се с един байт, ако са по-големи от 255 – с два.
Записи
Групиране на полета в записи
Схемата на релацията определя схемата на записа В този схема са указани имената и типовете на данните в полетата и офсетите на записите. Когато се пакетират няколко полета в един байт се харчи по-малко дискова памет, но операциите са по-сложни и възможността за грешки е по-голяма.
Записи с фиксирана дължина
Кортежите представяме чрез записи с фиксирани полета.
0 name 29
|
30 address 285
|
286 gender
|
287 birthdate 297
|
В някои машини по-ефективно се чете и пише когато полетата са разположени на граница на дума (тя може да е четна на 4 или 8)
0 29
|
//////
|
32 288
|
/////
|
292
|
/////
|
296 304
|
Нуждата от схема на записа се обосновава на факта, че схемата на релацията може да се изменя и затова се използва при работа само текущата схема.
Заглавни части на записите
Често трябва да се поддържа информация за записа, който не е стойностно поле. Най-често е чрез указател, който сочи къде и коя е схемата на записа (той е в заглавието). В заглавието още има дължината на записа, време, когато записа последно е изменян или четен. СУБД поддържа информация за схемата, която се появява в create table– атрибутите, типовете данни, наредба на атрибутите в кортежа и ограниченията. Тази информация не е в заглавието на записа, а има указател към нея.
Пакетиране в блокове
След като са подредени записите се пакетират в блокове. Блоковете са с фиксирана дължина.
Заглавна част
|
Запис 1
|
Запис 2
|
...
|
Запис N
|
Свободна памет
|
|
Заглавната част съдържа информация за:
-
връзки към един или повече блокове, които са част от мрежа блокове, използвани за създаване на индекси.
-
ролята, която играе блока в тази мрежа (индексен, за данни и др.).
-
за това на коя релация са тези кортежи от блока
-
директории на записите от блока (таблица, съдържаща офсетите към началото на всеки един запис).
-
идентификатор на блока
-
времето на последното обновяване или достъп да блока.
Указателите са важни когато трябва да се организират сложни записи с променлива дължина. Когато един блок е зареден в оперативната памет дължината му е един байт, зареден във виртуалното пространство. Ако блока е във вторичната памет се използва поредица от байтове, която идентифицира мястото на блока. Тя може да съдържа идентификатор на диск, номер на писта, цилиндър и т.н. Записите се адресират чрез блок, едната част на записа е адреса на блока, а другата – офсета в блока.
Операционната система и СУБД поддържат един сървърен процес, който предоставя данните от вторичната памет на един или няколко клиентски процеса. Клиентското приложение ползва конвенционалното адресно пространство (32-битова адресация). СУБД (операционната система) решава кои части от адресното пространство текущо ще бъдат заредени, а хардуера се грижи за преобразуването на виртуалните адреси във физически. Сървърните данни съществуват в адресното пространство на базите от данни. Там данните се адресират с адреси на блокове и с офсети в тях. Данните в това адресно пространство се представят чрез:
-
физически адреси – поредица от байтове еднозначно определяща къде се намира даден блок или запис във вторичната памет. Тя съдържа:
-
име на хост (ако една база от данни се съхранява на повече от една машина).
-
идентификатор на диск или друго устройство, на което е разположен.
-
номер на цилиндър.
-
номер на писта в цилиндъра.
-
номер на блок в пистата.
-
офсет в блока (ако става дума за запис)
-
логически адреси – прилагат се както за блокове, така и за записи - низ от байтове с фиксирана дължина. Имат таблица на изображението, която се съхранява на фиксирано място върху диска и служи за преобразуване на логически адреси във физически.
Представяне на логически и физически адреси
Един запис маже да се индексира чрез физическия номер на блока, в който се намира и да се използва ключ вместо офсет. По този начин записът може да се мести в блока. За да разпознаваме записите в блока трябва да знаем тяхното разположение. Най-лесния вариант е записите да са с фиксирана дължина. Комбинация от логически и физически адреси се предлага в т.нар таблица на офсетите, която се намира в заглавната част на блока.
 расте расте
Инфор-мация
|
 
|

|
|
|
Свободно пространство
|
ЗаписN
|
...
|
З апис2
|
З апис1
|
  - таблица на офсетите - заглавна част
Използва се когато записите са с променлива дължина. Записът се адресира – адрес на блока + офсет в таблицата на офсетите. Ако има външни указатели към запис те сочат в таблицата на офсетите. Ако се изтрие един запис в таблицата се слага “надгробен камък” за информация, че записът е изтрит, иначе външният указател ще сочи друг запис.
Поделитесь с Вашими друзьями: |