Changes between Version 3 and Version 4 of DatabaseCreation


Ignore:
Timestamp:
07/02/26 01:56:32 (4 days ago)
Author:
231024
Comment:

Додадена DML документација

Legend:

Unmodified
Added
Removed
Modified
  • DatabaseCreation

    v3 v4  
    44[attachment:schema.sql DDL]
    55
     6
     7= Вметнување на податоци - DML =
     8
    69== DML Скрипта за вметнување на податоци
    710[attachment:inserts.sql DML]
     11
     12
     13== Статички табели ==
     14
     15=== Species, Breed ===
     16За разлика од останатите статички табели, овие '''не''' се внесени преку `INSERT INTO ... VALUES`, туку се вчитани од надворешни CSV-датотеки (`species.csv`, `breed.csv`). Мора да се вчитат пред `Pet` генерирањето, бидејќи `Pet` и `Breed` зависат од нив преку FK.
     17
     18=== Supplier, Category, Room_Type, Service ===
     19Внесени директно преку `INSERT INTO ... VALUES` - по 5 добавувачи, 5 категории, 5 типови соби, 8 сервиси.
     20
     21=== Enum lookup табели ===
     22Единаесет табели (`OrderStatus`, `ReservationStatus`, `ServiceReservationStatus`, `PaymentMethod`, `PaymentStatus`, `DeliveryStatus`, `DeliveryTimeSlot`, `PetDeliveryStatus`, `PetDeliveryDestination`, `MedicalRecordStatus`, `DateStatus`) - внесени преку `INSERT INTO ... VALUES`.
     23
     24=== Hotel ===
     2510 хотели, внесени статички.
     26
     27----
     28
     29== Генерирани табели ==
     30
     31=== Employee ===
     32300 записи (~30 по хотел). Имиња по случаен избор од привремени табели `first_names_male`/`first_names_female`/`last_names`. Улога, телефон и e-mail генерирани преку `random()`; датум на вработување во опсег до ~2000 дена наназад.
     33
     34=== Room ===
     352,500 записи (250 по хотел). Број на соба составен од хотелски id + буква (A/B/C) + бројка; тип на соба циклично распределен преку `Room_Type`.
     36
     37=== Customer ===
     38150,000 записи. Истата шема на генерирање имиња како кај Employee; адреса избрана од привремена табела `addresses`; датум на регистрација до ~1500 дена наназад.
     39
     40=== Product ===
     41500 записи. Име составено од фиксна листа производи + реден број; категорија мапирана според фиксен пар име->категорија; добавувач избран случајно преку `ORDER BY md5(...)`.
     42
     43=== Pet ===
     44200,000 записи. Име избрано од фиксна листа од 30 имиња (циклично); вид и раса избрани случајно и меѓусебно усогласени (расата секогаш припаѓа на избраниот вид); сопственик поврзан случајно со постоечки клиент.
     45
     46=== "Order" ===
     4745,000 записи. Датум, статус (id 1–4) и сума по случаен избор; клиент и хотел поврзани случајно.
     48
     49=== OrderProduct ===
     50~23,000 записи (лимитирано на 23,000 нарачки). Количина и единечна цена по случаен избор.
     51
     52----
     53
     54== Batch-генерирани табели ==
     55
     56=== Reservation ===
     5710,000,000 записи, 100 итерации × 100,000. Статусите се распределени преку фиксна тежинска табела (6/15 confirmed, 4/15 completed, 2/15 pending, 2/15 cancelled, 1/15 no-show). `reservation_date` е поставен на датумот на регистрација на клиентот + случаен офсет (7–507 дена), со цел да остане конзистентен со `RoomReservation.check_in_date`. Забелешки исто така се доделуваат преку фиксна листа со псевдослучаен избор.
     58
     59=== RoomReservation ===
     6010,000,000 записи, 100 итерации × 100,000. Секоја резервација добива точно една соба (`UNIQUE(reservation_id)`); должина на престој 1–6 ноќи.
     61
     62'''Проверка по вчитување:'''
     63{{{#!sql
     64SELECT COUNT(*) FROM RoomReservation; -- ~10,000,000
     65SELECT MIN(check_in_date), MAX(check_out_date) FROM RoomReservation; -- 2015–2028
     66}}}
     67
     68=== Date ===
     69~11,870,000 записи, генерирани по опсег на `room_id` (batch од 100 соби). Два чекора по опсег:
     70 1. '''Occupied''' ноќи - извлечени директно од `RoomReservation` преку `generate_series` на секој опсег check_in–check_out.
     71 2. '''Available/Maintenance''' - пополнува ги преостанатите датуми (2015-01-01 до 2027-12-31) за секоја соба, со тежина 3:1 available:maintenance (`ON CONFLICT DO NOTHING`, за да не ги пребрише веќе внесените occupied редови).
     72
     73=== ServiceReservation ===
     74~9,000,000 записи. 60% од резервациите со собa добиваат 0 сервиси, 35% 1 сервис, 18% 2 сервиси, 7% 3 сервиси (кумулативна распределба преку `random()`). `scheduled_date` паѓа во опсегот на самиот престој; `scheduled_time` избран од 9 фиксни термини (09:00–17:00). Сервисот по резервација е избран преку детерминистичка хеш-функција од `reservation_id`.
     75
     76=== Payment ===
     77~6,000,000 записи, 100 итерации × 100,000. Генерирани '''само''' за резервации со `status_id IN (1, 2)` (confirmed/completed) - оттука бројот на плаќања е помал од вкупниот број резервации. Начин на плаќање и статус на плаќање избрани случајно (статусот со тежина: 4/6 completed, 1/6 refunded, 1/6 pending).
     78
     79----
     80
     81== Помошни/зависни табели ==
     82
     83=== Employee_Service, Product_Service ===
     84Врски многу-кон-многу, генерирани преку `generate_series` + случаен избор со `DISTINCT` (дупликатите се отфрлаат преку `ON CONFLICT DO NOTHING`), па конечниот број редови може да е нешто помал од целната бројка во `generate_series`.
     85
     86=== Review ===
     87150,000 записи. Оценката (1–10) е избрана случајно; коментарот се избира од една од 5 категории текст (во зависност од опсегот на оценката: 9–10, 7–8, 5–6, 3–4, 1–2), секоја со по 10 варијанти.
     88
     89=== MedicalRecord ===
     90300,000 записи. Име на ветеринар составено од "Dr." + случајно презиме; статус, алергии, лекови, белешки и дијагноза избрани од фиксни листи (со можност за `NULL` кај алергии/лекови/белешки).
     91
     92=== PetDelivery ===
     9380,000 записи (лимитирано на првите 80,000 резервации по случаен редослед). Време на достава во последните 365 дена; статус и дестинација избрани псевдослучајно.
     94
     95=== Delivery ===
     96Генерирана за секој ред од `OrderProduct` (join кон `"Order"` за `hotel_id`) - термин и статус на достава избрани случајно.
     97
     98----
     99
     100
     101
     102