Mysql
 sql >> база данни >  >> RDS >> Mysql

Проектиране на база данни с ценови правила за система за хотелски резервации

Всъщност съм работил по проектирането и внедряването на система за хотелски резервации и мога да предложа следните съвети въз основа на моя опит.

Бих препоръчал втората ви опция за дизайн, съхраняваща един запис за всяка отделна комбинация от дата/хотел. Причината е, че въпреки че ще има периоди, в които цената на хотела е една и съща през няколко дни, това е по-вероятно че, в зависимост от наличността, тя ще се променя с течение на времето и ще стане различна (хотелите са склонни да увеличават цената на стаята, когато наличността пада).

Освен това има и други важни части от информация, които ще трябва да бъдат съхранени, които са специфични за даден ден:

  1. Ще трябва да управлявате наличността на хотела, т.е. на дата x имау налични стаи. Това почти сигурно ще варира в зависимост от деня.
  2. Някои хотели имат периоди на затъмнение, когато хотелът не е наличен за кратки периоди от време (обикновено специфични дни).
  3. Време за изпълнение – някои хотели позволяват резервиране на стаи само определен брой дни предварително, това може да се различава между дните от седмицата и почивните дни.
  4. Минимален брой нощувки, отново данни, съхранявани по индивидуална дата, която казва, че ако пристигнете в този ден, трябва да останете x брой нощувки (да речем през уикенда)

Също така помислете за човек, който резервира едноседмичен престой, заявката в базата данни за връщане на цените и наличността за всеки ден от този престой е много по-сбита, ако имате запис за цените за всяка дата. Можете просто да направите заявка, където датата на цената на стаята е МЕЖДУ датата на пристигане и заминаване, за да върнете набор от данни с един запис на дата на престоя.

Осъзнавам, че с този подход ще съхранявате повече записи, но с добре индексирани таблици производителността ще бъде добра и управлението на данните ще бъде много по-лесно. Съдейки по вашия коментар, вие говорите само в района от 18 000 записа, което е доста малък обем (системата, върху която работих, има няколко милиона и работи добре).

За да илюстрирате допълнителното управление на данни, ако НЕ съхранявайте по един запис на ден, представете си, че хотел има цена от 100 USD и 20 стаи на разположение за целия декември:

Ще започнете с един запис:

1-Dec to 31st Dec Rate 100 Availability 20

След това продавате една стая на 10 декември.

Вашата бизнес логика вече трябва да създаде три записа от горния:

1-Dec to 9th Dec Rate 100 Availability 20 10-Dec to 10th Dec Rate 100 Availability 19 11-Dec to 31st Dec Rate 100 Availability 20

След това курсът се променя на 3 и 25 декември на 110

Вашата бизнес логика вече трябва да раздели данните отново:

1-Dec to 2-Dec Rate 100 Availability 20 3-Dec to 3-Dec Rate 110 Availability 20 4-Dec to 9-Dec Rate 100 Availability 20 10-Dec to 10-Dec Rate 100 Availability 19 11-Dec to 24-Dec Rate 100 Availability 20 25-Dec to 25-Dec Rate 110 Availability 20 26-Dec to 31-Dec Rate 100 Availability 20

Това е повече бизнес логика и повече разходи, отколкото съхраняването на един запис на дата.

Мога да ви гарантирам, че докато приключите, вашата система ще се окаже с един ред на дата така или иначе, така че можете да я проектирате по този начин от самото начало и да се възползвате от по-лесното управление на данни и по-бързите заявки към базата данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ще бъде ли singleton добър модел на дизайн за сайт за микроблогове?

  2. съставен (буквено-цифров) първичен ключ и автоматично увеличение

  3. как да изпратите опцията, избрана от падащия списък в jsp страница, за да изпълните mysql заявка

  4. ap_proxy_connect_backend деактивиращ работник за (127.0.0.1)

  5. MySQL utf8mb4, Грешки при запазване на Emojis