Changes between Initial Version and Version 1 of Phase0


Ignore:
Timestamp:
12/01/25 23:40:25 (4 weeks ago)
Author:
226052
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Phase0

    v1 v1  
     1== Креирање на табели
     2
     3{{{
     4
     5CREATE TABLE actor (
     6    actor_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY ,
     7    first_name VARCHAR(45) NOT NULL,
     8    last_name VARCHAR(45) NOT NULL,
     9    last_update TIMESTAMP DEFAULT now() NOT NULL
     10);
     11
     12}}}
     13
     14
     15{{{
     16
     17CREATE TABLE category (
     18    category_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     19    name VARCHAR(25) NOT NULL,
     20    last_update TIMESTAMP DEFAULT now() NOT NULL
     21);
     22
     23}}}
     24
     25
     26{{{
     27
     28CREATE TABLE language (
     29    language_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     30    name VARCHAR(20) NOT NULL,
     31    last_update TIMESTAMP DEFAULT now() NOT NULL
     32);
     33
     34}}}
     35
     36
     37{{{
     38
     39CREATE TABLE film (
     40    film_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     41    title VARCHAR(255) NOT NULL,
     42    description TEXT,
     43    release_year INT,
     44    language_id BIGINT NOT NULL,
     45    original_language_id BIGINT,
     46    rental_duration SMALLINT DEFAULT 3 NOT NULL,
     47    rental_rate NUMERIC(4,2) DEFAULT 4.99 NOT NULL,
     48    length SMALLINT,
     49    replacement_cost NUMERIC(5,2) DEFAULT 19.99 NOT NULL,
     50    rating VARCHAR(10) DEFAULT 'G',
     51    last_update TIMESTAMP DEFAULT now() NOT NULL,
     52    special_features TEXT[],
     53    CONSTRAINT language_fk FOREIGN KEY (language_id) REFERENCES language(language_id) ON UPDATE CASCADE,
     54    CONSTRAINT original_language_fk FOREIGN KEY (original_language_id) REFERENCES language(language_id) ON UPDATE CASCADE
     55
     56);
     57
     58}}}
     59
     60
     61{{{
     62
     63CREATE TABLE film_category (
     64    film_id BIGINT NOT NULL,
     65    category_id BIGINT NOT NULL,
     66    last_update TIMESTAMP DEFAULT now() NOT NULL,
     67    CONSTRAINT film_category_pk PRIMARY KEY (film_id, category_id),
     68    CONSTRAINT fk_film_category_film FOREIGN KEY (film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     69    CONSTRAINT fk_film_category_category FOREIGN KEY (category_id) REFERENCES category(category_id) ON UPDATE CASCADE ON DELETE RESTRICT
     70);
     71}}}
     72
     73
     74{{{
     75
     76CREATE TABLE film_actor (
     77    actor_id BIGINT NOT NULL,
     78    film_id BIGINT NOT NULL,
     79    last_update TIMESTAMP DEFAULT now() NOT NULL,
     80    CONSTRAINT pk_film_actor PRIMARY KEY (actor_id,film_id),
     81    CONSTRAINT fk_actor FOREIGN KEY(actor_id) REFERENCES actor(actor_id) ON DELETE  RESTRICT ON UPDATE CASCADE,
     82    CONSTRAINT fk_film FOREIGN KEY (film_id) REFERENCES film(film_id) ON DELETE  RESTRICT ON UPDATE CASCADE
     83);
     84
     85}}}
     86
     87
     88{{{
     89
     90CREATE TABLE country (
     91    country_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     92    country VARCHAR(50) NOT NULL,
     93    last_update TIMESTAMP DEFAULT now() NOT NULL
     94);
     95}}}
     96
     97
     98{{{
     99
     100CREATE TABLE city (
     101    city_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     102    city VARCHAR(50) NOT NULL,
     103    country_id BIGINT NOT NULL,
     104    last_update TIMESTAMP DEFAULT now() NOT NULL,
     105    CONSTRAINT country_fk FOREIGN KEY (country_id) REFERENCES country(country_id) ON DELETE RESTRICT ON UPDATE CASCADE
     106);
     107
     108}}}
     109
     110
     111{{{
     112
     113CREATE TABLE address (
     114    address_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     115    address VARCHAR(50) NOT NULL,
     116    address2 VARCHAR(50),
     117    district VARCHAR(20) NOT NULL,
     118    city_id BIGINT NOT NULL,
     119    postal_code VARCHAR(10),
     120    phone VARCHAR(20) NOT NULL,
     121    last_update TIMESTAMP DEFAULT now() NOT NULL,
     122    CONSTRAINT fk_address_city FOREIGN KEY (city_id) REFERENCES city(city_id) ON UPDATE CASCADE ON DELETE RESTRICT
     123);
     124
     125}}}
     126
     127
     128{{{
     129
     130CREATE TABLE store (
     131    store_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     132    manager_staff_id BIGINT NOT NULL UNIQUE,
     133    address_id BIGINT NOT NULL,
     134    last_update TIMESTAMP DEFAULT now() NOT NULL,
     135    CONSTRAINT address_fk FOREIGN KEY(address_id) REFERENCES address(address_id) ON UPDATE CASCADE ON DELETE RESTRICT
     136);
     137
     138}}}
     139
     140
     141{{{
     142
     143CREATE TABLE customer (
     144    customer_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     145    store_id BIGINT NOT NULL,
     146    first_name VARCHAR(45) NOT NULL,
     147    last_name VARCHAR(45) NOT NULL,
     148    email VARCHAR(50),
     149    address_id BIGINT NOT NULL,
     150    active BOOLEAN DEFAULT true NOT NULL,
     151    create_date DATE DEFAULT CURRENT_DATE NOT NULL,
     152    last_update TIMESTAMP DEFAULT now() NOT NULL,
     153    CONSTRAINT fk_customer_address FOREIGN KEY (address_id) REFERENCES address(address_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     154    CONSTRAINT fk_customer_store FOREIGN KEY (store_id) REFERENCES store(store_id) ON UPDATE CASCADE ON DELETE RESTRICT
     155);
     156
     157}}}
     158
     159
     160{{{
     161
     162CREATE TABLE staff (
     163    staff_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     164    first_name VARCHAR(45) NOT NULL,
     165    last_name VARCHAR(45) NOT NULL,
     166    address_id BIGINT NOT NULL,
     167    email VARCHAR(50),
     168    store_id BIGINT NOT NULL,
     169    active BOOLEAN DEFAULT true NOT NULL,
     170    username VARCHAR(16) NOT NULL,
     171    password VARCHAR(40),
     172    last_update TIMESTAMP DEFAULT now() NOT NULL,
     173    picture bytea,
     174    CONSTRAINT staff_address_fk FOREIGN KEY(address_id) REFERENCES address(address_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     175    CONSTRAINT staff_store_fk FOREIGN KEY(store_id) REFERENCES store(store_id) ON UPDATE CASCADE ON DELETE RESTRICT
     176
     177);
     178
     179}}}
     180
     181
     182{{{
     183
     184CREATE TABLE inventory (
     185    inventory_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     186    film_id BIGINT NOT NULL,
     187    store_id BIGINT NOT NULL,
     188    last_update TIMESTAMP DEFAULT now() NOT NULL,
     189    CONSTRAINT film_fk FOREIGN KEY(film_id) REFERENCES film(film_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     190    CONSTRAINT store_fk FOREIGN KEY (store_id) REFERENCES store(store_id) ON UPDATE CASCADE ON DELETE RESTRICT
     191);
     192
     193}}}
     194
     195
     196{{{
     197
     198CREATE TABLE rental (
     199    rental_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     200    rental_date TIMESTAMP DEFAULT now() NOT NULL,
     201    inventory_id BIGINT NOT NULL,
     202    customer_id BIGINT NOT NULL,
     203    return_date TIMESTAMP,
     204    staff_id BIGINT NOT NULL,
     205    last_update TIMESTAMP DEFAULT now() NOT NULL,
     206    CONSTRAINT fk_rental_inventory FOREIGN KEY (inventory_id) REFERENCES inventory(inventory_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     207    CONSTRAINT fk_rental_customer FOREIGN KEY (customer_id) REFERENCES customer(customer_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     208    CONSTRAINT fk_rental_staff FOREIGN KEY (staff_id) REFERENCES staff(staff_id) ON UPDATE CASCADE ON DELETE RESTRICT
     209);
     210
     211}}}
     212
     213
     214
     215{{{
     216
     217CREATE TABLE payment (
     218    payment_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
     219    customer_id BIGINT NOT NULL,
     220    staff_id BIGINT NOT NULL,
     221    rental_id BIGINT NOT NULL,
     222    amount numeric(5,2) NOT NULL,
     223    payment_date TIMESTAMP DEFAULT now() NOT NULL,
     224    CONSTRAINT fk_payment_customer FOREIGN KEY (customer_id) REFERENCES customer(customer_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     225    CONSTRAINT fk_payment_staff FOREIGN KEY (staff_id) REFERENCES staff(staff_id) ON UPDATE CASCADE ON DELETE RESTRICT,
     226    CONSTRAINT fk_payment_rental FOREIGN KEY (rental_id) REFERENCES rental(rental_id) ON UPDATE CASCADE ON DELETE RESTRICT
     227);
     228
     229}}}
     230
     231
     232
     233
     234== Пример скрипти за креирање на тест податоци
     235
     236{{{
     237INSERT INTO language (name)
     238VALUES ('English'), ('Spanish'), ('French'), ('German'), ('Italian');
     239}}}
     240
     241{{{
     242INSERT INTO category (name)
     243SELECT 'Category ' || i
     244FROM generate_series(1, 20) AS i;
     245}}}
     246
     247{{{
     248INSERT INTO actor (first_name, last_name)
     249SELECT 'Actor' || i, 'Lastname' || i
     250FROM generate_series(1, 100) AS i;
     251}}}
     252
     253{{{
     254INSERT INTO film
     255(title, description, release_year, language_id, original_language_id, rental_duration,
     256 rental_rate, length, replacement_cost, rating)
     257SELECT
     258    'Film #' || i,
     259    'Description for film ' || i,
     260    1980 + (i % 40),
     261    1 + (i % 5),
     262    NULL,
     263    3 + (i % 5),
     264    2.99 + (i % 5),
     265    60 + (i % 90),
     266    10.00 + (i % 20),
     267    CASE WHEN i % 5 = 0 THEN 'PG'
     268         WHEN i % 5 = 1 THEN 'G'
     269         WHEN i % 5 = 2 THEN 'PG-13'
     270         WHEN i % 5 = 3 THEN 'R'
     271         ELSE 'NC-17'
     272    END
     273FROM generate_series(1, 500) AS i;
     274}}}
     275
     276
     277{{{
     278INSERT INTO film_category (film_id, category_id)
     279SELECT f.film_id, ((f.film_id + gs - 1) % 20) + 1
     280FROM film f
     281CROSS JOIN generate_series(0, 2) AS gs;
     282}}}
     283
     284
     285{{{
     286INSERT INTO film_actor (actor_id, film_id)
     287SELECT ((f.film_id + gs - 1) % 100) + 1, f.film_id
     288FROM film f
     289CROSS JOIN generate_series(0, 3) AS gs;
     290}}}
     291
     292
     293{{{
     294INSERT INTO country (country)
     295VALUES ('USA'), ('UK'), ('Germany'), ('France'), ('Spain');
     296}}}
     297
     298{{{
     299INSERT INTO city (city, country_id)
     300SELECT 'City ' || i, (1 + (i % 5))
     301FROM generate_series(1, 20) AS i;
     302}}}
     303
     304
     305{{{
     306INSERT INTO address (address, address2, district, city_id, postal_code, phone)
     307SELECT
     308    'Address ' || i,
     309    NULL,
     310    'District ' || (i % 10),
     311    1 + (i % 20),
     312    '1000' || (i % 10),
     313    '555-000-' || i
     314FROM generate_series(1, 200) AS i;
     315}}}
     316
     317
     318{{{
     319INSERT INTO store (manager_staff_id, address_id)
     320SELECT i, i
     321FROM generate_series(1, 5) AS i;
     322}}}
     323
     324
     325{{{
     326INSERT INTO staff (first_name, last_name, address_id, email, store_id, active, username, password)
     327SELECT
     328    'Staff' || i,
     329    'Lastname' || i,
     330    1 + (i % 50),
     331    'staff' || i || '@example.com',
     332    1 + (i % 5),
     333    TRUE,
     334    'staff_user_' || i,
     335    'password'
     336FROM generate_series(1, 10) AS i;
     337}}}
     338
     339
     340{{{
     341
     342INSERT INTO customer (store_id, first_name, last_name, email, address_id)
     343SELECT
     344    1 + (i % 5),
     345    'Customer' || i,
     346    'Lastname' || i,
     347    'customer' || i || '@example.com',
     348    1 + (i % 200)
     349FROM generate_series(1, 500) AS i;
     350}}}
     351
     352
     353{{{
     354INSERT INTO inventory (film_id, store_id)
     355SELECT
     356    1 + (i % 500),
     357    1 + (i % 5)
     358FROM generate_series(1, 5000) AS i;
     359}}}
     360
     361
     362{{{
     363INSERT INTO rental (rental_date, inventory_id, customer_id, staff_id)
     364SELECT
     365    NOW() - (i || ' hours')::interval,
     366    1 + (i % 5000),
     367    1 + (i % 500),
     368    1 + (i % 10)
     369FROM generate_series(1, 5000) AS i;
     370}}}
     371
     372
     373{{{
     374INSERT INTO payment (customer_id, staff_id, rental_id, amount)
     375SELECT
     376    1 + (i % 500),
     377    1 + (i % 10),
     378    i,
     379    0.99 + (i % 10)
     380FROM generate_series(1, 5000) AS i;
     381}}}