| Version 1 (modified by , 5 days ago) ( diff ) |
|---|
Ограничувања и интегритет на податоците
Company_Category
Табелата Company_Category ги содржи категориите на компании (на пример: Salon, Spa, Barber Shop).
company_category_idе примарен клуч (PRIMARY KEY) и обезбедува единствена идентификација на секоја категорија.category_nameима UNIQUE ограничување со цел да не постојат две категории со исто име.
Company
Табелата Company ги содржи основните информации за компаниите.
company_idе примарен клуч.emailима UNIQUE ограничување бидејќи секоја компанија мора да има единствена контакт адреса.phoneима UNIQUE ограничување за да се избегне внесување на ист телефонски број за повеќе компании.is_activeима DEFAULT TRUE со што новите компании автоматски се означуваат како активни.created_atима DEFAULT NOW() за автоматско снимање на датумот на креирање.
Company_Company_Category
Оваа табела претставува M:N врска помеѓу компаниите и категориите.
- Композитниот PRIMARY KEY (
company_id,company_category_id) спречува дупли врски. company_idе FOREIGN KEY конCompany.ON DELETE CASCADEе избран бидејќи при бришење на компанија треба автоматски да се избришат и сите нејзини категории.
company_category_idе FOREIGN KEY конCompany_Category.ON DELETE CASCADEовозможува автоматско отстранување на сите поврзувања доколку се избрише категорија.
Company_Location
Табелата ги содржи физичките локации на компаниите.
location_idе примарен клуч.company_idе FOREIGN KEY конCompany.ON DELETE CASCADEе избран бидејќи локација не може да постои без компанија.
Business_Hours
Табелата го дефинира работното време на секоја локација.
hours_idе примарен клуч.location_idе FOREIGN KEY конCompany_Location.ON DELETE SET DEFAULTе предвиден за задржување на историски записи доколку локацијата се избрише.
- UNIQUE (
location_id,day_of_week) гарантира дека за еден ден постои само едно работно време. chk_business_hours_orderосигурува дека времето на затворање е по времето на отворање.chk_closed_timesосигурува дека затворен ден нема часови, а работен ден мора да има часови.
User
Табелата ги содржи сите корисници во системот.
user_idе примарен клуч.emailима UNIQUE ограничување бидејќи секој корисник мора да има единствена е-пошта.roleкористиuser_role_enumза контрола на дозволените типови корисници.is_activeима DEFAULT TRUE.created_atима DEFAULT NOW().
Client
Табелата содржи дополнителни информации за клиентите.
client_idе PRIMARY KEY и истовремено FOREIGN KEY конUser.ON DELETE CASCADEовозможува автоматско бришење на клиентскиот профил кога ќе се избрише корисникот.
loyalty_points >= 0спречува негативен број поени.
Owner
Табелата ги содржи сопствениците на компании.
owner_idе PRIMARY KEY и FOREIGN KEY конUser.ON DELETE CASCADEобезбедува конзистентност помеѓу корисникот и сопственикот.
company_idе FOREIGN KEY конCompany.owner_sinceавтоматски го поставува тековниот датум.
Staff
Табелата ги содржи вработените.
staff_idе PRIMARY KEY и FOREIGN KEY конUser.ON DELETE CASCADEосигурува дека нема осиротени записи.
location_idе FOREIGN KEY конCompany_Location.hourly_rate >= 0спречува негативна саатница.
Staff_Type
Табелата Staff_Type ги дефинира улогите и специјализациите на вработените.
staff_type_idе примарен клуч.staff_idе FOREIGN KEY конStaff.ON DELETE CASCADEе избран бидејќи записот за улогата нема значење без вработениот.
years_experience >= 0спречува внесување негативно искуство.- UNIQUE (
staff_id,role_type) спречува еден вработен повеќепати да ја има истата улога.
Service_Category
Табелата содржи категории на услуги.
service_category_idе примарен клуч.category_nameима UNIQUE ограничување за да нема дупликат категории.
Service
Табелата ги содржи сите услуги кои ги нуди компанијата.
service_idе примарен клуч.company_idе FOREIGN KEY конCompany.ON DELETE SET NULLе избран за услугата да може да остане зачувана во историски податоци дури и ако компанијата биде избришана.
service_category_idе FOREIGN KEY конService_Category.duration_minutes > 0осигурува позитивно времетраење.duration_minutes % 15 = 0осигурува услугите да се планираат во интервали од 15 минути.price >= 0спречува негативни цени.is_activeовозможува деактивација без физичко бришење.
Staff_Service
Табелата претставува M:N врска помеѓу вработени и услуги.
- Композитниот PRIMARY KEY (
staff_id,service_id) спречува дупли записи. staff_idе FOREIGN KEY конStaff.ON DELETE CASCADEавтоматски ги отстранува врските при бришење на вработен.
service_idе FOREIGN KEY конService.ON DELETE CASCADEавтоматски ги отстранува врските при бришење на услуга.
Staff_Availability
Табелата ја дефинира неделната достапност на вработените.
availability_idе примарен клуч.staff_idе FOREIGN KEY конStaff.ON DELETE CASCADEбидејќи достапноста нема смисла без вработен.
- UNIQUE (
staff_id,day_of_week) гарантира еден запис по ден. chk_availability_orderосигурува крајното време да е после почетното.
Blocked_Time
Табелата содржи периоди кога вработениот не е достапен.
block_idе примарен клуч.staff_idе FOREIGN KEY конStaff.ON DELETE CASCADEавтоматски ги брише блокираните периоди.
chk_blocked_time_orderосигурува правилен временски интервал.
Appointment
Табелата ги содржи сите закажани термини.
appointment_idе примарен клуч.client_idе FOREIGN KEY конClient.ON DELETE SET DEFAULTовозможува историскиот термин да остане зачуван дури и ако клиентот биде избришан.
staff_idе FOREIGN KEY конStaff.ON DELETE SET DEFAULTовозможува зачувување на историјата на термини.
location_idе FOREIGN KEY конCompany_Location.ON DELETE SET DEFAULTовозможува историските термини да останат во системот.
statusкористиappointment_status_enumза контрола на валидни статуси.booked_atавтоматски го снима времето на закажување.chk_appointment_time_orderосигурува крајот на терминот да биде по почетокот.chk_cancellationосигурува дека откажан термин мора да има датум на откажување.- UNIQUE (
staff_id,appointment_date,appointment_time) спречува двојно резервирање на ист вработен.
Appointment_Service
Табелата ги поврзува термините со услугите.
- Композитниот PRIMARY KEY (
appointment_id,service_id) спречува дупли услуги во ист термин. appointment_idе FOREIGN KEY конAppointment.ON DELETE SET DEFAULTовозможува зачувување на историски финансиски податоци.
service_idе FOREIGN KEY конService.duration_minutes > 0осигурува валидно времетраење.price >= 0спречува негативни вредности.- Цената се чува денормализирано за да остане непроменета и по идни промени на ценовникот.
Product
Табелата ги содржи сите производи и потрошни материјали.
product_idе примарен клуч.unit_price >= 0спречува негативни цени.reorder_level >= 0спречува негативен праг за нарачка.
Appointment_Product
Табелата ги поврзува термините со искористените производи.
- Композитниот PRIMARY KEY (
appointment_id,product_id) спречува дупли записи. appointment_idе FOREIGN KEY конAppointment.ON DELETE CASCADEбидејќи искористените производи немаат значење без терминот.
product_idе FOREIGN KEY конProduct.quantity_used > 0осигурува позитивна количина.- Количината претставува историски запис за потрошувачката.
Inventory
Табелата ја следи залихата на продукти по локација.
inventory_idе примарен клуч.product_idе FOREIGN KEY конProduct.location_idе FOREIGN KEY конCompany_Location.quantity_on_hand >= 0спречува негативна залиха.- UNIQUE (
product_id,location_id) осигурува само еден запис по производ и локација.
Invoice
Табелата ги содржи фактурите.
invoice_idе примарен клуч.appointment_idе FOREIGN KEY конAppointment.ON DELETE RESTRICTе избран бидејќи термин што има фактура не смее да биде избришан.
appointment_idима UNIQUE ограничување бидејќи еден термин може да има само една фактура.client_idе FOREIGN KEY конClient.subtotal >= 0discount_total >= 0tax >= 0totalавтоматски се пресметува како:subtotal + tax - discount_totalpayment_methodкористи enum за валидни начини на плаќање.
Promo_Code
Табелата содржи промотивни кодови.
promo_idе примарен клуч.company_idе FOREIGN KEY конCompany.ON DELETE CASCADEбидејќи кодот не може да постои без компанија.
discount_value > 0осигурува позитивен попуст.chk_promo_datesосигурува датумот на истекување да биде после датумот на почеток.- UNIQUE (
company_id,code) спречува дупликат кодови во иста компанија.
Invoice_Promo
Табелата претставува M:N врска помеѓу фактури и промо кодови.
- Композитниот PRIMARY KEY (
invoice_id,promo_id) спречува дупли записи. invoice_idе FOREIGN KEY конInvoice.ON DELETE CASCADEавтоматски ги брише поврзаните записи.
promo_idе FOREIGN KEY конPromo_Code.ON DELETE CASCADEавтоматски ги брише поврзаните записи.
Review
Табелата содржи оценки и коментари од клиентите.
review_idе примарен клуч.appointment_idе FOREIGN KEY конAppointment.- UNIQUE (
appointment_id) гарантира само една рецензија по термин. client_idе FOREIGN KEY конClient.rating BETWEEN 1 AND 5осигурува валидна оцена.created_atавтоматски го снима времето на креирање.
Loyalty_Transaction
Табелата ја следи историјата на поени.
transaction_idе примарен клуч.client_idе FOREIGN KEY конClient.appointment_idе FOREIGN KEY конAppointment.ON DELETE SET NULLовозможува задржување на трансакцијата дури и ако терминот се избрише.
points_earned >= 0points_spent >= 0chk_loyalty_nonzeroосигурува дека барем едно од полињата има вредност поголема од нула.
Service_Price_History
Табелата ја чува историјата на промени на цените.
price_history_idе примарен клуч.service_idе FOREIGN KEY конService.ON DELETE CASCADEбидејќи записите немаат значење без услугата.
old_price >= 0new_price >= 0changed_atавтоматски го снима времето на промената.
Staff_Time_Slot
Табелата содржи 15-минутни временски слотови за вработените.
slot_idе примарен клуч.staff_idе FOREIGN KEY конStaff.ON DELETE CASCADEбидејќи слотовите немаат значење без вработен.
appointment_idе FOREIGN KEY конAppointment.ON DELETE SET NULLовозможува слотот да остане достапен ако терминот се избрише.
slot_endавтоматски се пресметува одslot_start.chk_slot_orderосигурува правилен временски интервал.- UNIQUE (
staff_id,slot_start) спречува два идентични слота за ист вработен.
