Changes between Version 7 and Version 8 of AdvancedDatabaseDevelopment


Ignore:
Timestamp:
07/25/26 12:50:35 (6 days ago)
Author:
231136
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedDatabaseDevelopment

    v7 v8  
    427427GROUP BY p.playlist_id, p.name, p.cover, p.created_by;
    428428}}}
     429
     430== Custom Domains
     431
     432Целта тука е да направиме наша логика за проверки која понатаму би можела да се користи и на други места: на пример email поле денес проверуваме само на едно место, но во иднина може да има повеќе места каде што би сакале да го провериме и подобро, а и попрегледно, е доколку таа логика е на едно место.
     433
     434=== Проверка за email
     435
     436{{{
     437CREATE DOMAIN email_address AS TEXT
     438    CHECK ( VALUE ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$' );
     439
     440-- афектирани DDL изрази:
     441
     442CREATE TABLE USERS (
     443    user_id BIGINT PRIMARY KEY,
     444    full_name TEXT NOT NULL,
     445    email email_address NOT NULL, -- <--- custom domain
     446    password TEXT NOT NULL,
     447    username TEXT NOT NULL,
     448    profile_photo TEXT
     449);
     450
     451
     452}}}
     453
     454=== Проверка за валиден rating
     455
     456{{{
     457CREATE DOMAIN rating AS INT
     458    CHECK ( VALUE BETWEEN 1 AND 5 );
     459
     460-- афектирани DDL изрази:
     461
     462CREATE TABLE REVIEWS (
     463    listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
     464    musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
     465    grade rating NOT NULL, -- <--- custom domain
     466    comment TEXT,
     467
     468    CONSTRAINT reviews_pk
     469        PRIMARY KEY (listener_id, musical_entity_id)
     470);
     471
     472}}}
     473
     474=== Проверка за валиден url
     475
     476{{{
     477-- забелешка: доколку чуваме податоци на filesystem оваа проверка би паднала, но ние одиме со претпоставка
     478-- дека во вистински систем сите media податоци би ги чувале некаде на cloud (пр. Amazon S3) што е секако и добра практика,
     479-- па во тој случај дадената проверка би била валидна
     480
     481CREATE DOMAIN media_url AS TEXT
     482    CHECK ( VALUE ~ '^https?://' );
     483
     484-- афектирани DDL изрази:
     485
     486CREATE TABLE USERS (
     487    user_id BIGINT PRIMARY KEY,
     488    full_name TEXT NOT NULL,
     489    email email_address NOT NULL,
     490    password TEXT NOT NULL,
     491    username TEXT NOT NULL,
     492    profile_photo media_url -- <--- custom domain
     493);
     494
     495
     496CREATE TABLE SONGS (
     497    id BIGINT PRIMARY KEY REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
     498    album_id BIGINT REFERENCES ALBUMS(id) ON DELETE SET NULL,
     499    link media_url NOT NULL -- <--- custom domain
     500);
     501
     502CREATE TABLE PLAYLISTS (
     503    playlist_id BIGINT PRIMARY KEY,
     504    cover media_url, -- <--- custom domain
     505    name TEXT NOT NULL,
     506    created_by BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE NOT NULL
     507);
     508
     509}}}
     510
     511
     512=== Проверка за дали даден датум е поминат
     513
     514{{{
     515CREATE DOMAIN past_or_present_date AS DATE
     516    CHECK ( VALUE <= CURRENT_DATE );
     517
     518-- афектирани DDL изрази:
     519
     520CREATE TABLE MUSICAL_ENTITIES (
     521    id BIGINT PRIMARY KEY,
     522    title TEXT NOT NULL,
     523    genre TEXT NOT NULL,
     524    release_date past_or_present_date NOT NULL, -- <--- custom domain
     525    released_by BIGINT REFERENCES ARTISTS(user_id) ON DELETE CASCADE NOT NULL
     526);
     527
     528}}}