Changes between Version 2 and Version 3 of P2


Ignore:
Timestamp:
01/03/26 14:44:53 (2 weeks ago)
Author:
193284
Comment:

Updated P2: finalized relational schema + sample SQL DDL and constraints.

Legend:

Unmodified
Added
Removed
Modified
  • P2

    v2 v3  
     1= P2 - Logical and Physical Design, Database Creation (DDL)
     2
     3== Description
     4This phase covers the logical and physical database design derived from the ER model.
     5It includes the relational schema (tables with primary and foreign keys) and representative SQL DDL statements.
     6
    17== Logical Database Design (Relational Schema)
    28
     
    410with primary and foreign keys.
    511
    6 User(user_id PK, first_name, last_name, email, phone_number, gender, birthday)
     12User(user_id PK, first_name, last_name, email UNIQUE, phone_number, gender, birthday)
    713
    8 Wedding(wedding_id PK, date, budget, notes, user_id FK)
     14Wedding(wedding_id PK, date, budget, notes, user_id FK -> User.user_id)
    915
    10 Event(event_id PK, event_type, date, start_time, end_time, status, wedding_id FK)
     16Event(event_id PK, event_type, date, start_time, end_time, status, wedding_id FK -> Wedding.wedding_id)
    1117
    12 Guest(guest_id PK, first_name, last_name, email, wedding_id FK)
     18Guest(guest_id PK, first_name, last_name, email, wedding_id FK -> Wedding.wedding_id)
    1319
    14 Attendance(attendance_id PK, status, role, table_number, guest_id FK, event_id FK)
     20Event_RSVP(response_id PK, status, response_date, guest_id FK -> Guest.guest_id, event_id FK -> Event.event_id)
     21
     22Attendance(attendance_id PK, status, role, table_number NULL, guest_id FK -> Guest.guest_id, event_id FK -> Event.event_id)
    1523Note: table_number is optional because not all events require seating arrangements.
    16 
    17 Venue(venue_id PK, name, location, city, address, capacity, menu, phone_number, price_per_guest)
    1824
    1925Venue_Type(type_id PK, type_name)
    2026
    21 Venue_booking(booking_id PK, date, start_time, end_time, status, price, wedding_id FK, venue_id FK)
     27Venue(venue_id PK, name, location, city, address, capacity, menu, phone_number, price_per_guest, type_id FK -> Venue_Type.type_id)
    2228
     29Venue_booking(booking_id PK, date, start_time, end_time, status, price, wedding_id FK -> Wedding.wedding_id, venue_id FK -> Venue.venue_id)
     30
     31Band(band_id PK, band_name, genre, equipment, phone_number, price_per_hour)
     32
     33Band_booking(booking_id PK, date, start_time, end_time, status, wedding_id FK -> Wedding.wedding_id, band_id FK -> Band.band_id)
     34
     35Photographer(photographer_id PK, name, email UNIQUE, phone_number, price_per_hour)
     36
     37Photographer_booking(booking_id PK, date, start_time, end_time, status, wedding_id FK -> Wedding.wedding_id, photographer_id FK -> Photographer.photographer_id)
     38
     39Church(church_id PK, name, location, contact)
     40
     41Church_booking(booking_id PK, date, start_time, end_time, status, wedding_id FK -> Wedding.wedding_id, church_id FK -> Church.church_id)
     42
     43Registrar(registrar_id PK, name, contact, location, working_hours)
     44
     45Registrar_booking(booking_id PK, date, start_time, end_time, status, price, wedding_id FK -> Wedding.wedding_id, registrar_id FK -> Registrar.registrar_id)
     46
     47Priest(priest_id PK, name, contact)
     48(Connected to Church as 1:N if modeled in ER)
    2349
    2450== Physical Database Design (SQL DDL)
     
    5783    FOREIGN KEY (wedding_id) REFERENCES Wedding(wedding_id)
    5884);
     85
     86CREATE TABLE Venue_Type (
     87    type_id INT PRIMARY KEY,
     88    type_name VARCHAR(50) NOT NULL
     89);
     90
     91CREATE TABLE Venue (
     92    venue_id INT PRIMARY KEY,
     93    name VARCHAR(100) NOT NULL,
     94    location VARCHAR(100) NOT NULL,
     95    city VARCHAR(50) NOT NULL,
     96    address VARCHAR(150) NOT NULL,
     97    capacity INT NOT NULL,
     98    menu TEXT,
     99    phone_number VARCHAR(20),
     100    price_per_guest DECIMAL(10,2) NOT NULL,
     101    type_id INT NOT NULL,
     102    FOREIGN KEY (type_id) REFERENCES Venue_Type(type_id)
     103);
     104
     105CREATE TABLE Venue_booking (
     106    booking_id INT PRIMARY KEY,
     107    date DATE NOT NULL,
     108    start_time TIME NOT NULL,
     109    end_time TIME NOT NULL,
     110    status VARCHAR(20) NOT NULL,
     111    price DECIMAL(10,2) NOT NULL,
     112    wedding_id INT NOT NULL,
     113    venue_id INT NOT NULL,
     114    FOREIGN KEY (wedding_id) REFERENCES Wedding(wedding_id),
     115    FOREIGN KEY (venue_id) REFERENCES Venue(venue_id)
     116);
    59117}}}
    60 
    61118
    62119== Constraints and Assumptions
     
    65122* Foreign keys enforce referential integrity.
    66123* Each wedding is managed by exactly one user.
    67 * Bookings cannot overlap for the same resource.
     124* RSVP and Attendance link Guests to Events (M:N relationships resolved with associative entities).
     125* Booking tables (Venue_booking, Band_booking, Photographer_booking, Church_booking, Registrar_booking) prevent double-booking:
     126  a resource cannot be reserved in overlapping time intervals on the same date (enforced at application level and/or by additional database checks).