Опубликован: 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.

Таблица 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

Оценка размера базы данных:

  1. Таблица 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, то общее число страниц данных этой таблицы будет равно числу страниц хэш-таблицы.

  2. Таблица 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
  3. Индекс 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
  4. Представление 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 страниц
  5. Оценка размера фиксированной системной области:
    Total_Fixed_Overhead_Pages = 2*12 + 1*2 + 602112/1024 = 614 страниц
  6. Оценка размера базы данных:

    Размер базы данных = 7938 + 192500 + 6482 + 13 + 614 = 207560 страниц или 203 Мб.

Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин
Евгений Вершинин
Евгений Вершинин
Россия, Нижний Новгород, Нижегородский государственный технический университет, 2008
Aleksandr Arshinskyi
Aleksandr Arshinskyi
Россия