DEV Community

Cover image for I Was Confused About Merise for Weeks. Here's Everything I Learned
Alaa Mkbs
Alaa Mkbs

Posted on

I Was Confused About Merise for Weeks. Here's Everything I Learned

When I started learning database design, my teacher kept saying "MCD, MLD, MPD" and I had no idea what any of that meant. I searched in English and found almost nothing. That's when I realized Merise is a French methodology, and most of the internet doesn't talk about it.

So I learned it the hard way. This is the guide I wish existed when I started.

What is Merise?

Merise is a French software and database design methodology created in the 1970s-80s. It's widely used in France and French-speaking countries, but almost unknown in the English-speaking world where people use ERD or UML instead.

The core idea of Merise is that you design your database in 3 levels, going from abstract to concrete:

Level French Name English Equivalent
MCD Modèle Conceptuel de Données Conceptual Data Model
MLD Modèle Logique de Données Logical Data Model
MPD Modèle Physique de Données Physical Data Model

Think of it like building a house:

  • MCD = the architect's sketch (ideas, no technical details)
  • MLD = the blueprint (structure, measurements)
  • MPD = the actual construction (specific materials, real tools)

Level 1 MCD (Modèle Conceptuel de Données)

MCD is a graphical representation that describes the data of a system and their relationships in an abstract way. You're not thinking about tables or code yet just what exists and how things relate.

Structure:

  • Rectangles = Entities (contain attributes describing their properties)
  • Ovals = Relationships/associations between entities (connected to entities with lines)
  • Cardinalities = Indicate the minimum and maximum number of relations between entities
  • Attributes = The properties inside each entity

Cardinality the hardest part:

Cardinality answers: "how many of X can be related to Y?"

The format is min,max on each side:

  • 1,1 → exactly one (mandatory, unique)
  • 0,1 → zero or one (optional, max one)
  • 1,N → at least one, can be many
  • 0,N → optional, can be many
  • N,N → many to many → becomes a junction table in MLD

Example:

[School] 1,N -( has )- 1,1 [Course]

1,N next to School → one school has many courses. 1,1 next to Course → one course belongs to exactly one school.

The N-N rule:

In MCD, N-N relationships stay as just an oval. You don't create a table for them yet that happens in MLD.

Level 2 MLD (Modèle Logique de Données)

MLD is the translation of the MCD into a model adapted to relational databases defining tables, columns, primary keys, foreign keys, and relationships between tables.

Structure:

  • Tables = Come from entities and associations of the MCD
  • Columns = Based on the attributes from the MCD
  • Primary Key (PK) = One or more unique attributes identifying each row
  • Foreign Key (FK) = Links one table to another
  • No data types yet, no indexes that's MPD

3 rules for converting MCD → MLD:

1) Many-to-One (N:1):
The primary key from the N side becomes a foreign key in the other table.

2) Many-to-Many (N:N):
A new junction table is created. It contains at minimum two foreign keys pointing to both entities. If the association has its own attributes, they go in this table too.

3) One-to-One (1:1):
The primary key of one entity becomes a foreign key in the other table.

Example the N-N becomes a real table:

In MCD you had:

[Teacher] 1,N -( assigned to )- 1,N [Class]

In MLD this becomes 3 tables:

[Teacher] - [TeacherClass] - [Class]

Teacher (id, name, specialty)
Class (id, name)
TeacherClass (id, teacher_id FK, class_id FK)
Enter fullscreen mode Exit fullscreen mode

TeacherClass didn't exist in MCD as a table it was just an oval. Now it's a real table. (we can add some attributes if needed)

Level 3 MPD (Modèle Physique de Données)

MPD = MLD + everything specific to your database engine.

You add:

  • Data types (VARCHAR(255), INT, TIMESTAMP, BOOLEAN…)
  • Constraints (NOT NULL, UNIQUE, DEFAULT…)
  • Indexes
  • Engine-specific options (PostgreSQL vs MySQL vs SQLite)

Example:

MLD says:

User (id, email, password, role)
Enter fullscreen mode Exit fullscreen mode

MPD says:

CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email VARCHAR(255) NOT NULL UNIQUE,
  password TEXT NOT NULL,
  role VARCHAR(20) NOT NULL DEFAULT 'STUDENT',
  created_at TIMESTAMP(6) DEFAULT NOW()
);
CREATE INDEX idx_users_email ON users(email);
Enter fullscreen mode Exit fullscreen mode

If you use an ORM like Prisma, your Prisma schema is your MPD because it has types (@db.VarChar(255)), indexes (@@index), and database-specific decorators.

Why Is There No English Documentation?

Honestly, this frustrated me a lot. Every time I searched "MCD MLD database design" in English, I got nothing useful.

The reason is simple: Merise is French. It was created by French researchers, taught in French schools, and used by French companies. English-speaking developers grew up with ERD (Entity-Relationship Diagrams) and UML, which are different tools that do roughly the same thing.

It's not that Merise is bad it's actually very structured and clean. It's just that the internet is mostly in English, and English devs never learned it.

If this helped you, drop a comment. And if you know better Merise resources in English, please share them we need more.

Top comments (0)