= Логички и физички дизајн – Креирање база (со SQL DDL) = == Ознаки == - Со * се означени надворешни клучеви (FK). - Примарните клучеви (PK) се.bold. == Табели == === Ентитети === 1. '''USER''' ( **user_id** , username, email, password_hash, first_name, last_name ) - **user_id** (PK, bigint) - username (string, задолжително) - email (string, задолжително) - password_hash (string, задолжително) - first_name, last_name (опционално) 2. '''INSTRUCTOR''' ( **instructor_id** , instructor_email, instructor_password_hash, first_name, last_name, biography ) - **instructor_id** (PK, bigint) - instructor_email (string, задолжително) - instructor_password_hash (string, задолжително) - first_name (string, задолжително) - last_name (string, задолжително) - biography (text, опционално) 3. '''TRAINING''' ( **training_id** , training_name, description, duration, intensity_level ) - **training_id** (PK, bigint) - training_name (string, задолжително) - description (text, опционално) - duration (int, опционално) - intensity_level (string, опционално) 4. '''CLASS''' ( **class_id** , date, start_time, end_time, location, capacity, seats_available, instructor_id* ) - **class_id** (PK, bigint) - date (date, задолжително) - start_time (time, задолжително) - end_time (time, задолжително) - location (string, задолжително) - capacity (int, опционално) - seats_available (int, опционално) - instructor_id* → референцира до INSTRUCTOR(instructor_id) 5. '''EVENT''' ( **event_id** , event_name, description, date, time, location ) - **event_id** (PK, bigint) - event_name (string, задолжително) - description (text, опционално) - date (date, задолжително) - time (time, задолжително) - location (string, задолжително) 6. '''PACKAGE''' ( **package_id**, package_name, price, num_classes ) - **package_id** (PK, bigint) - package_name (string, задолжително) - price (decimal, задолжително) - num_classes (int, задолжително) 7. '''MERCH_ITEMS''' ( **merch_id**, item_name, description, price, quantity_in_stock ) - **merch_id** (PK, bigint) - item_name (string, задолжително) - description (text, опционално) - price (decimal, задолжително) - quantity_in_stock (int, опционално) === Табели за M:N Релации (Bridge) === 1. '''USER_CLASS''' ( user_id*, class_id* ) - user_id* → референцира до USER(user_id) - class_id* → референцира до CLASS(class_id) - Пример за релација books (USER ↔ CLASS, M:N) 2. '''CLASS_TRAINING''' ( class_id*, training_id* ) - class_id* → референцира до CLASS(class_id) - training_id* → референцира до TRAINING(training_id) - Пример за релација is_scheduled_for (M:N) 3. '''USER_EVENT''' ( user_id*, event_id* ) - user_id* → референцира до USER(user_id) - event_id* → референцира до EVENT(event_id) - Пример за релација registers (M:N) 4. '''USER_PACKAGE''' ( user_id*, package_id* ) - user_id* → референцира до USER(user_id) - package_id* → референцира до PACKAGE(package_id) - Пример за релација buys (M:N) 5. '''USER_MERCH''' ( user_id*, merch_id* ) - user_id* → референцира до USER(user_id) - merch_id* → референцира до MERCH_ITEMS(merch_id) - Пример за релација purchases (M:N) 6. '''PACKAGE_CLASS''' ( package_id*, class_id* ) - package_id* → референцира до PACKAGE(package_id) - class_id* → референцира до CLASS(class_id) - Пример за релација is_for (M:N) ---- == DDL скрипта за креирање и бришење на табелите == [attachment:kreiranje.sql "kreiranje.sql"] == DML скрипта за полнење на табелите со податоци == [attachment:polnenje.sql "polnenje.sql"] == Дијаграм на табелите (DBeaver) == [[Image(BlissCore_ER_Diagram.png, 500px)]]