Опубликован: 02.08.2007 | Уровень: специалист | Доступ: платный
Лекция 13:
Создание физической модели базы данных. Подготовка скрипта для создания базы данных
Пример расчета размера базы данных
Рассмотрим базу данных, которая состоит из таблицы CUSTOMER (ПОКУПАТЕЛЬ), таблицы CONTACT (КОНТАКТ), индекса NDX_CONTACT и представления BAD_CUSTOMER. Команды создания базы данных приведены ниже:
CREATE TABLE CUSTOMER (CUSTOMER_ID CHAR(5) NOT NULL, CUSTOMER_NAME VARCHAR(25), CUSTOMER_ADDR VARCHAR(50), CUSTOMER_RATING CHAR(10), PRIMARY KEY(CUSTOMER_ID)) PCTFREE 15; CREATE TABLE CONTACT (CUSTOMER_ID CHAR(5) NOT NULL, CONTACT_NAME VARCHAR(25) NOT NULL, CONTACT_PHONE DECIMAL(10,0), CONTACT_TEXT LONG VARCHAR, PRIMARY KEY (CUSTOMER_ID, CONTACT_NAME) FOREIGN KEY CUSTKEY (CUSTOMER_ID) REFERENCES CUSTOMER ON DELETE RESTRICT) PCTFREE 15; CREATE UNIQUE CLUSTERED HASHED INDEX NDX_CUSTOMER ON CUSTOMER (CUSTOMER_ID) SIZE 47628; CREATE UNIQUE INDEX NDX_CONTACT ON CONTACT ON CONTACT (CUSTOMER_ID,CONTACT_NAME) PCTFREE 10; CREATE VIEW BAD_CUSTOMER AS SELECT CUSTOMER_NAME, CUSTOMER_ADDR FROM CUSTOMER WHERE CUSTOMER_RATING='POOR';
Оценим размер базы данных в предположении, что она создана под управлением СУБД SQLBASE. Ожидаемое число строк в таблице CUSTOMER - порядка 50000, а в таблице CONTACT - 175000. После загрузки базы данных была выполнена оценка средней длины полей, которая приведена в таблице 13.7.
Таблица | Колонка | Максимальный размер | Средний размер |
---|---|---|---|
CUSTOMER | CUSTOMER_ID | 5 | 5 |
CUSTOMER_NAME | 25 | 10 | |
CUSTOMER_ADDR | 50 | 30 | |
CUSTOMER_RATING | 10 | 5 | |
CONTACT | CUSTOMER_ID | 5 | 5 |
CONTACT_NAME | 25 | 15 | |
CONTACT_PHONE | 10 | 10 | |
CONTACT_TEXT | 500 | 10 |
Оценка размера базы данных:
- Таблица CUSTOMER:
Data_Length = 5 + 10 + 30 + 5 = 50 Row_Length = 18 + 6 + (2*4) + 50 = 82 Row_Length_with_Stack = (82*100)/85 =97 Rows_per_Page = (1024 - 86)/97 = 9 Nbr_Row_Pages =50000/9 = 5556 Nbr_Hashed_Table_Pages = 5556/0,7 = 7938 Total_Data_Page = 7938
Так как в этой таблице нет колонок типа LONG VARCHAR, то общее число страниц данных этой таблицы будет равно числу страниц хэш-таблицы.
- Таблица CONTACT:
Data_Length = 5 + 15 + (((10 + 2)/2 + 1) + 12 = 39 Row_Length = 18 + (2*4) + 39 = 65 Row_Length_with_Stack = (65*100)/75 = 87 Rows_per_Page = (1024 - 86)/87 = 10 Nbr_Row_Pages =175000/10 = 17500 Nbr_Long_Pages = 17500 * 1 = 175000 Total_Data_Page = 175000 + 17500 = 192500
- Индекс NDX_CONTACT:
Key_Length = 5 +15 = 20 Index_Entry_Length = 9 + 2 + 20 = 31 Usable_Index_Page_Size = (1024 - 74)*(100 - 10)/100 = 855 Index_Entry_per_Page = 855/31 = 27 Nbr_Index_Pages = 175000/27 = 6482
- Представление BAD_CUSTOMER
Fixed_Overhead = 12*1024 = 12288 байт Variable_Overhead = 1*150 + 2*170 = 490 байт Variable_Overhead_all_Views = 0 Total_View_overhead_in_Pages = (12288 + 490 + 0)/1024 = 13 страниц
- Оценка размера фиксированной системной области:
Total_Fixed_Overhead_Pages = 2*12 + 1*2 + 602112/1024 = 614 страниц
- Оценка размера базы данных:
Размер базы данных = 7938 + 192500 + 6482 + 13 + 614 = 207560 страниц или 203 Мб.