> ## Documentation Index
> Fetch the complete documentation index at: https://ship-jskiller1404-add-ommiting-private-fields-feature.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Using events

We are using events to keep our systems simple and use the [full power of denormalized data in MongoDB.](https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-2) Denormalization is a database optimization technique in which we add redundant data to one or more tables. It can help us avoid costly joins in a database. You can find a simple example of this technique below.

<img src="https://mintcdn.com/ship-jskiller1404-add-ommiting-private-fields-feature/bAV2JshmglZLw2nx/images/denormalization.png?fit=max&auto=format&n=bAV2JshmglZLw2nx&q=85&s=afd6b4c6907e4174a3e50a6ed30a639a" alt="Denormalization" width="1536" height="1040" data-path="images/denormalization.png" />

The picture below shows the 'events part' of a sample API implementation:

<img src="https://mintcdn.com/ship-jskiller1404-add-ommiting-private-fields-feature/E9XBHl8mCOQjBjO1/images/events.png?fit=max&auto=format&n=E9XBHl8mCOQjBjO1&q=85&s=bdd7e7a2709afa1a7a58b0196ae43b44" alt="Event handlers" width="1848" height="1894" data-path="images/events.png" />

In Ship, every resource produces events on create, update and delete database operations. As a result, we have all events in one place and these events describe system behavior. Stripe has [an event for any change](https://stripe.com/docs/api/events/types) that happens in their system. We do pretty much the same.
