CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

22 May, 2023

Database revision vs Event sourcing for tracking changes of entity changes

 Programing Coderfunda     May 22, 2023     No comments   

We are developing a platform where there is the possibility of booking hotels. The booking process can consist of various operations: creation, change of dates, cancellation, confirmation, and so on. We need to have access to the history of booking changes to display this on the front end (for now, only for displaying, who knows what might happen in the future). One of the ways to use this history of changes: Created a booking -> changed the dates -> we show the user the previous dates and current ones. The entity of Booking: { checkInDate: string, checkOutDate: string, amount: number ... +30 fields } Found two approaches: First approach: Versioning the entity at the database level. If our entity is updated, then a copy of the entity is automatically created, but with new fields. In the case of changing the dates of a just created booking, the client will return an array of bookings, each will have all the fields of the booking and an additional field with the status (created, changed dates etc). Pros of this approach: * Faster backend implementation, changes are mostly required at the database level. * One familiar Booking model is used. * Ability to configure rollbacks. * Good performance. Cons: * Difficult to set up auto migration. * The database stores a lot of excess data, which will be returned to the client who does not need them. Second approach: Event-driven architecture There is a described list of possible events that can occur with a booking. An event is created for each operation, which can contain a payload with the data that has changed. In the case of changing the dates of a just created booking, the client will return a booking with an array of events, each of which contains a list of data that has changed. The changed-dates event may contain the previous dates and current ones. Pros: * Only necessary data is stored in the database and returned to the front. * Having a list of described events, the flow becomes transparent, which improves the understanding of the code. * In the event payload, you can add any data, even those not related to the previous booking change. Easier to expand functionality. * Business logic is kept on the backend, the front simply displays the data, business logic does not penetrate the database level. Cons: * Many additional types are added, which need to be used on the front. * More complex backend implementation. Could you suggest which solution is better to choose? Maybe you have a better option?
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook

Related Posts:

  • Installing WordPress Installing WordPressInstalling WordPress is very easy and takes less than five minutes to complete. It is best known for its ease of installatio… Read More
  • WordPress Licensing WordPress LicensingWordPress is licensed under GPLv2 (GNU General Public License) which makes it free and open-source software. Each copy of Wor… Read More
  • Installing WordPess on local server Installing WordPess on local serverWordPress can be installed using local servers like XAMPP, WAMPP, etc. We?ll assume that your system already … Read More
  • WordPress.com vs WordPress.org WordPress.com vs WordPress.orgBoth the sites are part of WordPress. Only difference is about "who is hosting your website".WordPress.comWordPres… Read More
  • WordPress Installation using MS WebmatrixWordPress Installation using MS WebmatrixWebmatrix is a free and lightweight software tool launched by Windows to download different applications. Thi… Read More
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • Vue3 :style backgroundImage not working with require
    I'm trying to migrate a Vue 2 project to Vue 3. In Vue 2 I used v-bind style as follow: In Vue 3 this doesn't work... I tried a...
  • SQL ORDER BY Keyword
      The SQL ORDER BY Keyword The ORDER BY keyword is used to sort the result-set in ascending or descending order. The ORDER BY keyword sorts ...
  • Enabling authentication in swagger
    I created a asp.net core empty project running on .net6. I am coming across an issue when I am trying to enable authentication in swagger. S...
  • failed to load storage framework cache laravel excel
       User the export file and controller function  ..         libxml_use_internal_errors ( true ); ..Good To Go   public function view () : ...
  • Features CodeIgniter
    Features CodeIgniter There is a great demand for the CodeIgniter framework in PHP developers because of its features and multiple advan...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (68)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

  • Failed to install 'cordova-plugin-firebase': CordovaError: Uh oh - 9/21/2024
  • pyspark XPath Query Returns Lists Omitting Missing Values Instead of Including None - 9/20/2024
  • SQL REPL from within Python/Sqlalchemy/Psychopg2 - 9/20/2024
  • MySql Explain with Tobias Petry - 9/20/2024
  • How to combine information from different devices into one common abstract virtual disk? [closed] - 9/20/2024

Laravel News

  • Clean Up Your Code with the whenHas Method - 6/5/2025
  • Laravel OpenRouter - 6/4/2025
  • Enable Flexible Pattern Matching with Laravel's Case-Insensitive Str::is Method - 5/31/2025
  • Cast Model Properties to a Uri Instance in 12.17 - 6/4/2025
  • Simplify Negative Relation Queries with Laravel's whereDoesntHaveRelation Methods - 5/31/2025

Copyright © 2025 CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda