| Version 3 (modified by , 2 weeks ago) ( diff ) |
|---|
Relational Model: MajStore
Релационен дијаграм
Ентитети
- Permission – ентитет кој ги чува сите дозволи во системот. Permissions се издвоени како посебен ентитет за да се овозможи флексибилен систем за авторизација. Наместо фиксни улоги, системот дозволува комбинација од повеќе дозволи по улога.
- permission_id (serial, primary key)
- permission_name (text, not null, unique)
- description (text)
- Role – ентитет кој ги дефинира улогите на корисниците.
- role_id (serial, primary key)
- role_name (text, not null, unique)
- Role_Permission – ентитет за поврзување на улоги и дозволи (N:M)
- role_permission_id (serial, primary key)
- role_id (foreign key)
- permission_id (foreign key)
- User – ентитет кој претставува основен кориснички профил
- user_id (serial, primary key)
- first_name (text, not null)
- last_name (text, not null)
- username (text, not null, unique)
- email (text, not null)
- password_hash (text, not null)
- User_Role – ентитет за поврзување на корисници и улоги (N:M). Корисник може да има повеќе улоги (на пример: worker и admin).
- user_role_id (serial, primary key)
- role_id (foreign key)
- user_id (foreign key)
- Notification – ентитет за известувања кон корисниците
- notification_id (serial, primary key)
- message (text, not null)
- is_read (bool, not null)
- created_at (timestamp, not null)
- user_id (foreign key)
- Location – ентитет за локации. Издвоена како посебен ентитет за повторна употреба кај корисници, постови и работници.
- location_id (serial, primary key)
- city (text, not null)
- region (text, not null)
- address (text, not null)
- Worker – ентитет кој ги претставува мајсторите
- worker_id (serial, primary key)
- bio (text)
- works_remote (bool, not null)
- location_id (foreign key)
- user_id (foreign key)
- Calendar – Секој worker има свој календар
- calendar_id (serial, primary key)
- worker_id (foreign key)
- Work_Day – ентитет за работни денови во канлендарот, за детално дефинирање на работно време по денови
- work_day_id (serial, primary key)
- start_time (timestamp, not null)
- end_time (timestamp, not null)
- calendar_id (foreign key)
- day_id (foreign key)
- Day – ентитет за денови во неделата. Нормализација на деновите за избегнување неконзистентни вредности.
- day_id (serial, primary key)
- day_name (text, unique)
- Calendar_Event – ентитет за настани во календар
- event_id (serial, primary key)
- title (text, not null)
- description (text)
- start_time (timestamp, not null)
- end_time (timestamp, not null)
- calendar_id (foreign key)
- Certificate – ентитет за сертификати на работници
- certificate_id (serial, primary key)
- certificate_name (text, not null)
- issuer (text, not null)
- worker_id (foreign key)
- Specialty – ентитет за специјалности, односно струки кои ги работат мајсторите, како и категории на постовите (водоводџија, електричар...)
- specialty_id (serial, primary key)
- specialty_name (text, unique)
- Worker_Specialty – Еден worker може да има повеќе специјалности (N:M).
- worker_specialty_id (serial, primary key)
- worker_id (foreign key)
- specialty_id (foreign key)
- Post_Status – ентитет за статуси на постови
- status_id (serial, primary key)
- status_name (text, not null, unique)
- Post – ентитет за огласи од корисници
- post_id (serial, primary key)
- title (text, not null)
- description (text)
- created_at (timestamp)
- user_id (foreign key)
- location_id (foreign key)
- status_id (foreign key)
- Post_Image – ентитет за слики поврзани со пост
- image_id (serial, primary key)
- image_file (bytea, not null)
- post_id (int, foreign key)
- Post_Specialty – ентитет за поврзување Post и Specialty (N:M). Еден пост може да бара повеќе специјалности (на пример за расипан бојлер потребен и електричар и водоводџија), а една специјалност може да се појавува во повеќе постови.
- post_specialty_id (serial, primary key)
- post_id (int, foreign key)
- specialty_id (int, foreign key)
- Application_Status – ентитет за статуси на апликации
- status_id (serial, primary key)
- status_name (text, not null, unique)
- Application – ентитет за апликации од worker-и за даден пост
- application_id (serial, primary key)
- message (text)
- needed_time (time)
- expected_price (float)
- created_at (timestamp, not null)
- worker_id (foreign key)
- post_id (foreign key)
- status_id (foreign key)
- Review – ентитет за оценки на мајстори по струка
- review_id (serial, primary key)
- grade (int, 0–5)
- created_at (timestamp)
- reviewer_id (foreign key)
- worker_specialty_id (foreign key)
- Review_Comment – ентитет за коментари на рецензии
- comment_id (serial, primary key)
- review_id (int, foreign key)
- reply (text, not null)
- Payment_Method – ентитет за начини на плаќање
- method_id (serial, primary key)
- method_name (text, not null, unique)
- max_amount (float, not null)
- tax (float, not null)
- Worker_Method – ентитет за поврзување Worker и Payment_Method, каде секој worker може да има повеќе методи за плаќање(N:M)
- worker_method_id (serial, primary key)
- worker_id (int, foreign key)
- method_id (int, foreign key)
- Payment_Status – ентитет за статуси на плаќања
- status_id (serial, primary key)
- status_name (text, not null, unique)
- Payment – ентитет за плаќања
- payment_id (serial, primary key)
- amount (float, not null)
- payment_date (timestamp, not null)
- worker_method_id (int, foreign key)
- payment_status (int, foreign key)
- plan_id (int, foreign key)
- Premium_Plan – ентитет за премиум пакети. Овој ентитет ги дефинира премиум плановите, како реклами, поставување на одреден мајстор прв на листа при пребарување во негоа категорија и слично. Целта е преку овие премиум планови системот да прави профит.
- plan_id (serial, primary key)
- name (text, not null, unique)
- price (float, not null)
- duration_days (int, not null)
- description (text, not null)
- Premium_Worker – ентитет за премиум статус на worker
- premium_id (serial, primary key)
- start_date (timestamp, not null)
- end_date (timestamp, not null)
- plan_id (int, foreign key)
- worker_id (int, foreign key)
- payment_id (int, foreign key)
Релации
- Receives (User : Notification, 1:N) - Еден корисник може да прима повеќе известувања, додека секое известување припаѓа на еден корисник.
- Located_at (Worker : Location, N:1) - Еден worker може да има една локација на работа (во галвно се однесува на пример на автомеханичари кои работат во работилница), додека на една локација може да има повеќе workers.
- Оwns_profile (User : Worker, 1:1) - Еден корисник може да има најмногу еден worker профил (односно секој корисник може ама и не мора да е worker), и секој worker е поврзан со точно еден кориснички профил.
- Has_calendar (Worker : Calendar, 1:1) - Секој worker има свој календар, и секој календар припаѓа на еден worker.
- Contains (Calendar : Work_Day, 1:N) - Еден календар може да содржи повеќе работни денови.
- Defines (Day : Work_Day, 1:N) - Еден ден од неделата може да се користи во повеќе записи за работно време, додека секој запис се однесува на еден ден.
- sSchedules (Calendar : Calendar_Event, 1:N) - Еден календар може да содржи повеќе настани (на пример повеќе закажани термини за работа), додека секој настан припаѓа на еден календар.
- Has_certificate (Worker : Certificate, 1:N) - Еден worker може да има повеќе сертификати, додека секој сертификат припаѓа на еден worker.
- Creates_post (User : Post, 1:N) - Еден корисник може да креира повеќе постови преку кои бара мајстор, додека секој пост е креиран од еден корисник.
- Post_location (Post : Location, N:1) - Повеќе постови можат да бидат на иста локација, додека секој пост има една локација.
- Has_status (Post : Post_Status, N:1) - Повеќе постови можат да имаат ист статус, додека секој пост има еден статус.
- Contains_image (Post : Post_Image, 1:N) - Еден пост може да има повеќе слики, додека секоја слика припаѓа на еден пост.
- Applies_to (Worker : Application, 1:N) - Еден worker може да поднесе повеќе апликации за работа, додека секоја апликација е поднесена од еден worker.
- Receives_application (Post : Application, 1:N) - Еден пост може да добие повеќе апликации, додека секоја апликација се однесува на еден пост.
- Has_status (Application : Application_Status, N:1) - Повеќе апликации можат да имаат ист статус, додека секоја апликација има еден статус.
- Writes_review (User : Review, 1:N) - Еден корисник може да напише повеќе рецензии, додека секоја рецензија има еден автор.
- rReviews_specialty (Worker_Specialty : Review, 1:N) - Една worker може да има повеќе специјалности па поради тоа рецензиите се однесуваат на специфична worker-specialy, каде секој ваков worker-specialy пар може да има повеќе рецензии а една рецензија се однесува на еден ваков пар.
- Has_comment (Review : Review_Comment, 1:N) - Една рецензија може да има повеќе коментари, додека секој коментар припаѓа на една рецензија.
- Defines_payment (Worker_Method : Payment, 1:N) - Еден пар за worker и метод на плаќање, може да се користи во повеќе плаќања, додека секое плаќање користи еден таков пар.
- Has_status (Payment : Payment_Status, N:1) - Повеќе плаќања можат да имаат ист статус, додека секое плаќање има еден статус.
- Belongs_to_plan (Payment : Premium_Plan, N:1) - Со едно плаќање може ад се плати еден избран премиум план, додека секој премиум план може да биде купен од повеќе мајстори.
- Subscribes (Worker : Premium_Worker, 1:N) - Еден worker може да има повеќе различни премиум понуди во различни периоди, додека секој premium_Worker припаѓа на еден worker.
- Uses_plan (Premium_Worker : Premium_Plan, N:1) - Повеќе premium записи можат да користат ист план, додека секој запис користи еден план, бидејќи записите во Premium_Worker се однесуваат на даден план во даден период. Доколку корисникот сака повторно да го плати истиот план, за тоа ќе има нов запис во табелата со новиот датум.
- Paid_with (Premium_Worker : Payment, 1:1) -секој Premium_Worker се добива со едно плаќање.
Attachments (3)
- RelationalModel.jpg (188.6 KB ) - added by 2 weeks ago.
- RelationalModel-ProjectCode.svg (297.2 KB ) - added by 13 days ago.
- MajStore_final.vpp (1.2 MB ) - added by 13 days ago.
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.

