= Логички и физички дизајн – Креирање база (со SQL DDL) = == Ознаки == - Со * се означени надворешни клучеви (FK). - Примарните клучеви (PK) се подвлечени болдирани. == Табели == === Ентитети === 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_ , first_name, last_name, biography ) - instructor_id (PK, bigint) - first_name (string, задолжително) - last_name (string, задолжително) - biography (text, опционално) - (Ако сакате 1:N со CLASS, ќе имате FK во CLASS → instructor_id*) 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_Tables_DBeaver.png, 600px)]]