Changes between Initial Version and Version 1 of ERModel


Ignore:
Timestamp:
09/23/26 17:58:12 (4 days ago)
Author:
202033
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ERModel

    v1 v1  
     1== ER дијаграм
     2[[Image(ERModel_v3.png)]]
     3
     4== Податочни барања
     5
     6=== Ентитети
     7
     81. ** 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
     172. **Role** - Ентитет што ги претставува улогите што корисниците можат да ги имаат во системот
     18
     19* role_id – primary key(примарен клуч)
     20* name – varchar (задолжителен атрибут)
     21
     223. **Review** - Ентитет што ги претставува рецензиите дадени од корисниците
     23
     24* review_id – primary key (примарен клуч)
     25* rating – int (задолжителен атрибут)
     26* comment – text (опционален атрибут)
     27* created_at – datetime (задолжителен атрибут)
     28* payment_id – int (задолжителен атрибут)
     29
     304. **Service** - Ентитет што ги претставува услугите што ги нуди салонот
     31
     32* service_id – primary key (примарен клуч)
     33* name – varchar (задолжителен атрибут)
     34* price – decimal (задолжителен атрибут)
     35* duration_minutes – int (задолжителен атрибут)
     36* category_id – int (задолжителен атрибут)
     37
     38
     395. **Category** - Ентитет што ги претставува категориите на услуги
     40
     41* category_id – primary key(примарен клуч)
     42* name – varchar (задолжителен атрибут)
     43
     446. **Package** - Ентитет што ги претставува пакетите на услуги што ги нуди салонот
     45
     46* package_id – primary key(примарен клуч)
     47* name – varchar (задолжителен атрибут)
     48* max_usage – int (задолжителен атрибут)
     49* total_price – decimal (задолжителен атрибут)
     50
     51
     527. **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
     648. **Status** - Ентитет што ги претставува можните статуси на термините
     65
     66* status_id – primary key(примарен клуч)
     67* name – varchar (задолжителен атрибут)
     68* user_id – int (задолжителен атрибут)
     69
     709. **LoyaltyCard** - Ентитет што ги претставува картичките за лојалност на корисниците
     71
     72* card_id – primary key(примарен клуч)
     73* points – int (задолжителен атрибут)
     74
     7510. **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
     8611. **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
     9712. **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
     10513. **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Забелешка:
     161Availability во тековната шема нема директна FK релација со други табели, се користи како правило за валидација на временски прозорци за термини.