22.Анализ адекватности моделирования (1034746), страница 2
Текст из файла (страница 2)
(H_C_W_ID, H_C_D_ID, H_C_ID) внешний ключ, ссылающийся на
C_W_ID, C_D_ID, C_ID).
(H_W_ID, H_D_ID) внешний ключ, ссылающийся на(D_W_ID, D_ID).
5. Таблица NEW-ORDER - на каждую запись DISTRICT 900 строк NEW-ORDER связаны с последними 900 строками таблицы ORDER (то есть NO_O_ID лежит между 2101 и 3000)
Имя атрибута | Тип | Длина | Значение атрибута |
NO_O_ID | 3000 уникальных значений, равно O_ID | ||
NO_D_ID | 10 уникальных значений IDs, равно D_ID | ||
NO_W_ID | W уникальных значений IDs, равно W_ID |
Первичный ключ: (NO_W_ID, NO_D_ID, NO_O_ID)
(NO_W_ID, NO_D_ID, NO_O_ID) - внешний ключ, ссылающийся на
(O_W_ID, O_D_ID, O_ID)
6. Таблица ORDER - 3000 строк для каждой строки DISTRICT
Имя атрибута | Тип | Длина | Значение атрибута |
O_ID | 3000 уникальных значений | ||
O_D_ID | 10 уникальных значений, равно D_ID | ||
O_W_ID | W уникальных значений, равно W_ID | ||
O_C_ID | Последовательность номеров [1,3000] в случайном порядке | ||
O_ENTRY_D | date and time | Текущая дата и время ОС | |
O_CARRIER_ID | 10 уникальных значений или NULL; если O_ID < 2101, то случайное число в интервале [1,10], NULL - в противном случае | ||
O_OL_CNT | Случайное целое число в интервале [5,15] | ||
O_ALL_LOCAL | numeric | 1 digit | Равно 1 |
Первичный ключ: (O_W_ID, O_D_ID, O_ID)
(O_W_ID, O_D_ID, O_C_ID) внешний ключ, ссылающийся на
(C_W_ID, C_D_ID, C_ID)
7. Таблица ORDER-LINE - число строк в ORDER-LINE равно O_OL_CNT, сгенерированному при создании записи ORDER
Имя атрибута | Тип | Длина | Значение атрибута |
OL_O_ID | 3000 уникальных значений, равно O_ID | ||
OL_D_ID | 10 уникальных значений, равно D_ID | ||
OL_W_ID | W уникальных значений, равно W_ID | ||
OL_NUMBER | Уникально в интервале [0,O_OL_CNT] | ||
OL_I_ID | Случайное целое число в [1,100000] | ||
OL_SUPPLY_W_ID | W уникальных значений, равно W_ID | ||
OL_DELIVERY_D | date and time | Если OL_O_ID <2101, то равно O_ENTRY_D, иначе NULL | |
OL_QUANTITY | numeric | 2 digits | Равно 5 |
OL_AMOUNT | numeric | 6 digits | Если OL_O_ID<2101, то равно 0.00, иначе - это случайное число из интервала [0.01, 9999.99] |
OL_DIST_INFO | text | 24 | Случайная строка длиной 24 |
Первичный ключ: (OL_W_ID, OL_D_ID, OL_O_ID, OL_NUMBER).
(OL_W_ID, OL_D_ID, OL_O_ID) - внешний ключ, ссылающийся на
(O_W_ID, O_D_ID, O_ID).
(OL_SUPPLY_W_ID, OL_I_ID) - внешний ключ, ссылающийся на
(S_W_ID, S_I_ID).
8. Таблица ITEM
Имя атрибута | Тип | Длина | Значение атрибута |
I_ID | 100000 уникальных значений | ||
I_IM_ID | Случайная величина в [1,10000] | ||
I_NAME | text | 24 | Случайная строка со случайной длиной в интервале [14,24] |
I_PRICE | numeric | 5 digits | случайное число в интервале [1.00,100.00] |
I_DATA | text | 50 | Случайная строка со случайной длиной в интервале [26,50] |
Первичный ключ: I_ID
9. Таблица STOCK - 100000 строк на каждую запись WAREHOUSE
Имя атрибута | Тип | Длина | Значение атрибута |
S_I_ID | 100000 | ||
S_W_ID | W уникальных значений, равно W_ID | ||
S_QUANTITY | numeric | 4 digits | Случайное число в интервале [10,100] |
S_DIST_01 | text | 24 | Случайная строка длиной 24 |
S_DIST_02 | text | 24 | Случайная строка длиной 24 |
S_DIST_03 | text | 24 | Случайная строка длиной 24 |
S_DIST_04 | text | 24 | Случайная строка длиной 24 |
S_DIST_05 | text | 24 | Случайная строка длиной 24 |
S_DIST_06 | text | 24 | Случайная строка длиной 24 |
S_DIST_07 | text | 24 | Случайная строка длиной 24 |
S_DIST_08 | text | 24 | Случайная строка длиной 24 |
S_DIST_09 | text | 24 | Случайная строка длиной 24 |
S_DIST_10 | text | 24 | Случайная строка длиной 24 |
S_YTD | numeric | 8 digits | Равно 0 |
S_ORDER_CNT | numeric | 4 digits | Равно 0 |
S_REMOTE_CNT | numeric | 4 digits | Равно 0 |
S_DATA | text | 50 | Случайная строка со случайной длиной в интервале [26,50] |
Первичный ключ: (S_W_ID, S_I_ID).
S_W_ID внешний ключ, ссылающийся на W_ID.
S_I_ID внешний ключ, ссылающийся на I_ID.
В ТРС-С определены пять транзакций.
Транзакция New-Order (Новый-Заказ) обрабатывает поступивший на склад заказ, состоящий в среднем из 10 позиций, размещает информацию о заказе в базе данных и соответствующим образом обновляет уровень товарных запасов.
Транзакция Payment (Платёж) обрабатывает платёж покупателя, обновляет его баланс и другие данные в отношениях Warehouse, District и Customer. Покупатель может быть идентифицирован либо уникальным идентификатором, либо по имени.
Транзакция Order-Status (Статус-Заказа) возвращает статус последнего заказа покупателя. Так же как и в транзакции Payment, покупатель может быть идентифицирован либо уникальным идентификатором, либо по имени.
Транзакция Delivery (Выполнение, Доставка) обрабатывает 10 невыполненных заказов (по одному на каждый район), включающих в среднем 10 позиций. Соответствующие заказы удаляются из таблицы New-Order.
И наконец, транзакция Stock-Level (Уровень-Запасов) определяет количество товаров (пунктов), заказанных в последних 20 заказах в конкретном районе.
Ниже приведены описания этих транзакций на уровне операторов обращений к базе данных.
1. Транзакция New-Order
Запрос (SQL-оператор ) | Число повторов |
SELECT c_discount, c_last, c_credit, w_tax INTO :c_discount, :c_last, :c_credit, :w_tax FROM customer, warehouse WHERE w_id = :w_id AND c_w_id = w_id AND c_d_id = :d_id AND c_id = :c_id; | 1 |
SELECT d_next_o_id, d_tax INTO :d_next_o_id, :d_tax FROM district WHERE d_id = :d_id AND d_w_id = :w_id; | 1 |
UPDATE district SET d_next_o_id = :d_next_o_id + 1 WHERE d_id = :d_id AND d_w_id = :w_id; | 1 |
INSERT INTO ORDERS (o_id, o_d_id, o_w_id, o_c_id,o_entry_d, o_ol_cnt, o_all_local) VALUES (:o_id, :d_id, :w_id, :c_id,:datetime, :o_ol_cnt, :o_all_local); | 1 |
INSERT INTO NEW_ORDER (no_o_id, no_d_id, no_w_id) VALUES (:o_id, :d_id, :w_id); | 1 |
SELECT i_price, i_name , i_data INTO :i_price, :i_name, :i_data FROM item WHERE i_id = :ol_i_id; | 10 |
SELECT s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04, s_dist_05 s_dist_06, s_dist_07, s_dist_08, s_dist_09, s_dist_10 INTO :s_quantity, :s_data, :s_dist_01, :s_dist_02, :s_dist_03, :s_dist_04, :s_dist_05 :s_dist_06, :s_dist_07, :s_dist_08, :s_dist_09, :s_dist_10 FROM stock WHERE s_i_id = :ol_i_id AND s_w_id = :ol_supply_w_id; | 10 |
UPDATE stock SET s_quantity = :s_quantity WHERE s_i_id = :ol_i_id AND s_w_id = :ol_supply_w_id; | 10 |
INSERT INTO order_line (ol_o_id, ol_d_id, ol_w_id, ol_number,ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info) VALUES (:o_id, :d_id, :w_id, :ol_number,:ol_i_id, :ol_supply_w_id, :ol_quantity, :ol_amount, :ol_dist_info); | 10 |
2. Транзакция Payment
Запрос (SQL-оператор ) | Число повторов |
UPDATE warehouse SET w_ytd = w_ytd + :h_amount WHERE w_id=:w_id; | 1 |
SELECT w_street_1, w_street_2, w_city, w_state, w_zip, w_name INTO :w_street_1, :w_street_2, :w_city, :w_state, :w_zip, :w_name FROM warehouse WHERE w_id=:w_id; | 1 |
UPDATE district SET d_ytd = d_ytd + :h_amount WHERE d_w_id=:w_id AND d_id=:d_id; | 1 |
SELECT d_street_1, d_street_2, d_city, d_state, d_zip, d_name INTO :d_street_1, :d_street_2, :d_city, :d_state, :d_zip, :d_name FROM district WHERE d_w_id=:w_id AND d_id=:d_id; | 1 |
SELECT count(c_id) INTO :namecnt FROM customer WHERE c_last=:c_last AND c_d_id=:c_d_id AND c_w_id=:c_w_id; | 0.6 |
Открыть курсор для запроса (найдены 3 записи): SELECT c_first, c_middle, c_id,c_street_1, c_street_2, c_city, c_state, c_zip,c_phone, c_credit, c_credit_lim,c_discount, c_balance, c_since FROM customer WHERE c_w_id=:c_w_id AND c_d_id=:c_d_id AND c_last=:c_last ORDER BY c_first; | 0.6 |
SELECT c_first, c_middle, c_last,c_street_1, c_street_2, c_city, c_state, c_zip,c_phone, c_credit, c_credit_lim,c_discount, c_balance, c_since INTO :c_first, :c_middle, :c_last,:c_street_1, :c_street_2, :c_city, :c_state, :c_zip, :c_phone, :c_credit, :c_credit_lim,:c_discount, :c_balance, :c_since FROM customer WHERE c_w_id=:c_w_id AND c_d_id=:c_d_id AND c_id=:c_id; | 0.4 |
SELECT c_data INTO :c_data FROM customer WHERE c_w_id=:c_w_id AND c_d_id=:c_d_id AND c_id=:c_id; | 0.1 |
UPDATE customer SET c_balance = :c_balance, c_data = :c_new_data WHERE c_w_id = :c_w_id AND c_d_id = :c_d_id AND c_id = :c_id; | 0.1 |
UPDATE customer SET c_balance = :c_balance WHERE c_w_id = :c_w_id AND c_d_id = :c_d_id AND c_id = :c_id; | 0.9 |
INSERT INTO history (h_c_d_id, h_c_w_id, h_c_id, h_d_id,h_w_id, h_date, h_amount, h_data) VALUES (:c_d_id, :c_w_id, :c_id, :d_id,:w_id, :datetime, :h_amount, :h_data); | 1 |
3. Транзакция Order-Status.
Запрос (SQL-оператор ) | Число повторов |
SELECT count(c_id) INTO :namecnt FROM customer WHERE c_last=:c_last AND c_d_id=:d_id AND c_w_id=:w_id; | 0.6 |
Открыть курсор для запроса (найдены 3 записи): SELECT c_balance, c_first, c_middle, c_id FROM customer WHERE c_last=:c_last AND c_d_id=:d_id AND c_w_id=:w_id ORDER BY c_first; | 0.6 |
SELECT c_balance, c_first, c_middle, c_last INTO :c_balance, :c_first, :c_middle, :c_last FROM customer WHERE c_id=:c_id AND c_d_id=:d_id AND c_w_id=:w_id; | 0.4 |
SELECT o_id, o_carrier_id, o_entry_d INTO :o_id, :o_carrier_id, :entdate FROM orders WHERE o_c_id=:c_id AND o_d_id=:d_id AND o_w_id=:w_id; | 1 |
Открыть курсор для запроса (найдены 10 записей): SELECT ol_i_id, ol_supply_w_id, ol_quantity,ol_amount, ol_delivery_d FROM order_line WHERE ol_o_id=:o_id AND ol_d_id=:d_id AND ol_w_id=:w_id; | 1 |
4. Транзакция Delivery
Запрос (SQL-оператор ) | Число повторов |
Открыть курсор (c_no) для запроса (найдена 1 запись): SELECT no_o_id FROM new_order WHERE no_d_id = :d_id AND no_w_id = :w_id AND no_o_id ORDER BY no_o_id ASC; | 10 |
DELETE FROM new_order WHERE CURRENT OF c_no; | 10 |
SELECT o_c_id INTO :c_id FROM orders WHERE o_id = :no_o_id AND o_d_id = :d_id AND o_w_id = :w_id; | 10 |
UPDATE orders SET o_carrier_id = :o_carrier_id WHERE o_id = :no_o_id AND o_d_id = :d_id AND o_w_id = :w_id; | 10 |
UPDATE order_line SET ol_delivery_d = :datetime WHERE ol_o_id = :no_o_id AND ol_d_id = :d_id AND ol_w_id = :w_id; | 10 |
SELECT SUM(ol_amount) INTO :ol_total FROM order_line WHERE ol_o_id = :no_o_id AND ol_d_id = :d_id AND ol_w_id = :w_id; | 10 |
UPDATE customer SET c_balance = c_balance + :ol_total WHERE c_id = :c_id AND c_d_id = :d_id AND c_w_id = :w_id; | 10 |
5. Транзакция Stock-Level.
Запрос (SQL-оператор ) | Число повторов |
SELECT d_next_o_id INTO :o_id FROM district WHERE d_w_id=:w_id AND d_id=:d_id; | 1 |
SELECT COUNT(DISTINCT (s_i_id)) INTO :stock_count FROM order_line, stock WHERE ol_w_id=:w_id AND ol_d_id=:d_id AND ol_o_id<:o_id AND ol_o_id>=:o_id-20 AND s_w_id=:w_id AND s_i_id=ol_i_id AND s_quantity < :threshold; | 1 |
Описания схемы базы данных и транзакций теста ТСР-С были введены в базу данных КИСП. Эти описания вместе с описаниями спецификаций узлов и сетей хранятся в базе данных, поставляемой с дистрибутивной дискетой КИСП (файл proj1.dmp).