| | 1 | == ER дијаграм |
| | 2 | [[Image(ERModel_v3.png)]] |
| | 3 | |
| | 4 | == Податочни барања |
| | 5 | |
| | 6 | === Ентитети |
| | 7 | |
| | 8 | 1. ** User** - Ентитет што ги претставува корисниците на системот |
| | 9 | |
| | 10 | * user_id – primary key(примарен клуч) |
| | 11 | * full_name – varchar (задолжителен атрибут) |
| | 12 | * email – varchar (задолжителен атрибут) |
| | 13 | * phone – varchar (задолжителен атрибут) |
| | 14 | * created_at – datetime (задолжителен атрибут) |
| | 15 | * password_hash – text (задолжителен атрибут) |
| | 16 | |
| | 17 | 2. **Role** - Ентитет што ги претставува улогите што корисниците можат да ги имаат во системот |
| | 18 | |
| | 19 | * role_id – primary key(примарен клуч) |
| | 20 | * name – varchar (задолжителен атрибут) |
| | 21 | |
| | 22 | 3. **Review** - Ентитет што ги претставува рецензиите дадени од корисниците |
| | 23 | |
| | 24 | * review_id – primary key (примарен клуч) |
| | 25 | * rating – int (задолжителен атрибут) |
| | 26 | * comment – text (опционален атрибут) |
| | 27 | * created_at – datetime (задолжителен атрибут) |
| | 28 | * payment_id – int (задолжителен атрибут) |
| | 29 | |
| | 30 | 4. **Service** - Ентитет што ги претставува услугите што ги нуди салонот |
| | 31 | |
| | 32 | * service_id – primary key (примарен клуч) |
| | 33 | * name – varchar (задолжителен атрибут) |
| | 34 | * price – decimal (задолжителен атрибут) |
| | 35 | * duration_minutes – int (задолжителен атрибут) |
| | 36 | * category_id – int (задолжителен атрибут) |
| | 37 | |
| | 38 | |
| | 39 | 5. **Category** - Ентитет што ги претставува категориите на услуги |
| | 40 | |
| | 41 | * category_id – primary key(примарен клуч) |
| | 42 | * name – varchar (задолжителен атрибут) |
| | 43 | |
| | 44 | 6. **Package** - Ентитет што ги претставува пакетите на услуги што ги нуди салонот |
| | 45 | |
| | 46 | * package_id – primary key(примарен клуч) |
| | 47 | * name – varchar (задолжителен атрибут) |
| | 48 | * max_usage – int (задолжителен атрибут) |
| | 49 | * total_price – decimal (задолжителен атрибут) |
| | 50 | |
| | 51 | |
| | 52 | 7. **Appointment** - Ентитет што ги претставува закажаните термини на корисниците |
| | 53 | |
| | 54 | * appointment_id – primary key (примарен клуч) |
| | 55 | * appointment_time – datetime (задолжителен атрибут) |
| | 56 | * end_time – datetime (задолжителен атрибут) |
| | 57 | * notes – text (опционален атрибут) |
| | 58 | * type – enum('pre-booked','walk-in') (задолжителен атрибут) |
| | 59 | * total_price – decimal (задолжителен атрибут) |
| | 60 | * user_id – int (задолжителен атрибут) |
| | 61 | * status_id – int (задолжителен атрибут) |
| | 62 | * points_awarded – boolean (задолжителен атрибут) |
| | 63 | |
| | 64 | 8. **Status** - Ентитет што ги претставува можните статуси на термините |
| | 65 | |
| | 66 | * status_id – primary key(примарен клуч) |
| | 67 | * name – varchar (задолжителен атрибут) |
| | 68 | * user_id – int (задолжителен атрибут) |
| | 69 | |
| | 70 | 9. **LoyaltyCard** - Ентитет што ги претставува картичките за лојалност на корисниците |
| | 71 | |
| | 72 | * card_id – primary key(примарен клуч) |
| | 73 | * points – int (задолжителен атрибут) |
| | 74 | |
| | 75 | 10. **Payment** - Ентитет што ги претставува плаќањата направени од корисниците |
| | 76 | |
| | 77 | * payment_id – primary key(примарен клуч) |
| | 78 | * amount – decimal (задолжителен атрибут) |
| | 79 | * method – varchar (задолжителен атрибут) |
| | 80 | * timestamp – datetime (задолжителен атрибут) |
| | 81 | * status – varchar (задолжителен атрибут) |
| | 82 | * points_used – int (задолжителен атрибут) |
| | 83 | * appointment_id – int (опционален атрибут) |
| | 84 | * package_purchase_id – int (опционален атрибут) |
| | 85 | |
| | 86 | 11. **UserPackagePurchase** - Ентитет што ги претставува купените пакети по корисник |
| | 87 | |
| | 88 | * purchase_id – primary key (примарен клуч) |
| | 89 | * user_id – int (задолжителен атрибут) |
| | 90 | * package_id – int (задолжителен атрибут) |
| | 91 | * purchased_at – datetime (задолжителен атрибут) |
| | 92 | * total_uses – int (задолжителен атрибут) |
| | 93 | * remaining_uses – int (задолжителен атрибут) |
| | 94 | * status – varchar/text (задолжителен атрибут) |
| | 95 | * expires_at – date (опционален атрибут) |
| | 96 | |
| | 97 | 12. **AppointmentPackageUsage** - Ентитет што евидентира користење пакет за термин |
| | 98 | * appointment_id – primary key (примарен клуч, истовремено FK) |
| | 99 | * purchase_id – int (задолжителен атрибут) |
| | 100 | * service_id – int (задолжителен атрибут) |
| | 101 | * used_units – int (задолжителен атрибут) |
| | 102 | * finalized_at – datetime (опционален атрибут) |
| | 103 | |
| | 104 | |
| | 105 | 13. **Availability** - Ентитет што ги претставува временските прозорци за достапност |
| | 106 | * availability_id – primary key (примарен клуч) |
| | 107 | * date – date (задолжителен атрибут) |
| | 108 | * start_time – time (задолжителен атрибут) |
| | 109 | * end_time – time (задолжителен атрибут) |
| | 110 | * is_closed – boolean (задолжителен атрибут) |
| | 111 | |
| | 112 | |
| | 113 | === Релации |
| | 114 | |
| | 115 | **1. UserRole – M:N релација помеѓу User и Role** |
| | 116 | Еден корисник може да има повеќе улоги, и една улога може да биде доделена на повеќе корисници. Оваа релација овозможува флексибилен систем за управување со дозволи. |
| | 117 | |
| | 118 | **2. ReviewPayment – 1:0..1 релација помеѓу Review и Payment** |
| | 119 | Секој Review е поврзан со точно еден Payment, а еден Payment може да има најмногу еден Review. На овој начин, само корисници со извршено плаќање можат да остават рецензија. |
| | 120 | |
| | 121 | **3. ServiceCategory – N:1 релација помеѓу Service и Category** |
| | 122 | Повеќе услуги можат да припаѓаат на иста категорија, но секоја услуга припаѓа на точно една категорија. Оваа релација ги организира услугите по категории. |
| | 123 | |
| | 124 | **4. PackageService – M:N релација помеѓу Package и Service** |
| | 125 | Еден пакет може да содржи повеќе услуги, и една услуга може да биде дел од повеќе пакети. Оваа релација овозможува креирање на промотивни пакети со попуст. |
| | 126 | |
| | 127 | **5. UserAppointment – 1:N релација помеѓу User и Appointment** |
| | 128 | Еден корисник може да има повеќе термини, но еден термин припаѓа на точно еден корисник. Оваа релација ги следи закажаните термини на секој корисник. |
| | 129 | |
| | 130 | **6. AppointmentService – M:N релација помеѓу Appointment и Service** |
| | 131 | Еден термин може да вклучува повеќе услуги, и една услуга може да биде дел од повеќе термини. Оваа релација овозможува флексибилно закажување на комбинирани услуги. |
| | 132 | |
| | 133 | **7. AppointmentStatus – N:1 релација помеѓу Appointment и Status** |
| | 134 | Повеќе термини можат да имаат ист статус, но секој термин има точно еден статус. Оваа релација го следи статусот на термините. |
| | 135 | |
| | 136 | **8. UserLoyaltyCard – 0..1:1 релација помеѓу User и LoyaltyCard** |
| | 137 | Еден корисник може да има најмногу една картичка за лојалност, а секоја картичка за лојалност припаѓа на точно еден корисник. Оваа релација овозможува систем за поени и награди. |
| | 138 | |
| | 139 | **9. AppointmentPayment – 0..N:0..1 релација помеѓу Appointment и Payment** |
| | 140 | Еден термин може да има повеќе плаќања поврзани со него, а едно плаќање се однесува на најмногу еден термин. Релацијата е опционална на двете страни бидејќи дел од плаќањата се за купување пакет. |
| | 141 | |
| | 142 | **10. UserPurchase – 1:N релација помеѓу User и UserPackagePurchase** |
| | 143 | Еден корисник може да купи повеќе пакети, но секое купување на пакет припаѓа на точно еден корисник. |
| | 144 | |
| | 145 | **11. PurchasePackage – N:1 релација помеѓу UserPackagePurchase и Package** |
| | 146 | Повеќе кориснички купувања можат да се однесуваат на ист пакет, но секое купување се однесува на точно еден пакет. |
| | 147 | |
| | 148 | **12. PackagePayment – 0..N:0..1 релација помеѓу UserPackagePurchase и Payment** |
| | 149 | Едно купување на пакет може да има повеќе плаќања (обиди/трансакции), а едно плаќање може да се однесува на најмногу едно купување на пакет. |
| | 150 | |
| | 151 | **13. AppointmentUsage – 0..1:1 релација помеѓу Appointment и AppointmentPackageUsage** |
| | 152 | Еден термин може да има најмногу едно евидентирано користење пакет, а секоја евиденција за користење пакет припаѓа на точно еден термин. |
| | 153 | |
| | 154 | **14. ServiceUsage – N:1 релација помеѓу AppointmentPackageUsage и Service** |
| | 155 | Повеќе записи за користење пакет можат да се однесуваат на иста услуга, но секој запис се однесува на точно една услуга. |
| | 156 | |
| | 157 | **15. PurchaseUsage – N:1 релација помеѓу AppointmentPackageUsage и UserPackagePurchase** |
| | 158 | Повеќе записи за користење пакет можат да се однесуваат на исто корисничко купување пакет, но секој запис се однесува на точно едно купување. |
| | 159 | |
| | 160 | Забелешка: |
| | 161 | Availability во тековната шема нема директна FK релација со други табели, се користи како правило за валидација на временски прозорци за термини. |