---
# System prepended metadata

title: Database Schema Design & Tools Discussion

---

# Database Schema Design & Tools Discussion

## 1. Concern

- Alexandre has a concern:

> once we choose our DB type, they’re may not be a reverse on that choice later.

- We have many M:N relationships in our database

E.x:
1. User <=> Company
2. User <=> Role
3. Company <=> Application
...

---

## 2. Output of this meeting

### Let's finalize the choice of Database

After this meeting, we should have the last decision for the question: "Which database we will use?" (at least in the MVP version)

... So we can start working on the code

---

## 3. Current Choices

1. RDBMS (PostgreSQL, Mysql, ...)
2. NoSQL (MongoDB, ScyllaDB, ...)

Michael Bailly stated:

> This is the rule with NoSQL datastore: you have super fast, easy to scale, replicate, stores, and it’s up to your applcation code to handle the relationships.

---

## 4. Draft Version

In the draft version, I (Hoang) target MongoDB for our 1st MVP version:

https://ci.linagora.com/linagora/lgs/saas/portal/specifications/-/wikis/design/database

#### My personal opinion:

- NoSQL is better for building MVP. We don't have fixed schemas so we can add/update/remove fields/collections anytime as our business decision changes (which will be a lot, you'll see)
- Team familiar tech stack:
    - Tuan Le has great understanding about MongoDB. He had worked with MongoDB in ESN for 4 years
    - I (Hoang) am not that kind of expert, but in recent years, I worked with NoSQL (MongoDB, Firestore) most of the time

#### Notes:

About the permission to call API between server and server (e.x Twake to call SaaS API), normally, we need to use `service account`: https://developers.google.com/identity/protocols/oauth2/service-account

But for the MVP version, we can just use an API key for simplicity.

If we decide to use `service account` after the MVP 1st version is out, we might need to add more collections to this schema (I don't imagine it yet)

---

## 5. Time for Alexandre to present his draft

Alexandre:

> Hello everyone,I've made on my side a draft (to have an other view of what can be useful to have from my point of view) of the database important keys.
Since we're working asynchronously, with whom can I discuss about what I have? Can we have like a quick meeting (20-30 minutes top I think to discuss it?) Having a live discussion will be better than having to talk in a thread with the delay

> it's something not to take lightly, and I think, once we choose our DB type, they're may not be a reverse on that choice later.

---

## 6. Discussion