ERD

ERD

Sure! Here are examples of One-to-One, One-to-Many, and Many-to-Many relationships with table schemas.


1. One-to-One (1:1) #

A one-to-one relationship means each record in Table A corresponds to exactly one record in Table B.

erDiagram
    Users ||--o| UserProfiles : "has one"
    Users {
        int user_id PK
        string username
        string email
    }
    UserProfiles {
        int profile_id PK
        int user_id FK
        string first_name
        string last_name
        string bio
    }

Each user has exactly one profile.

CREATE TABLE Users (
    user_id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL
);

CREATE TABLE UserProfiles (
    profile_id SERIAL PRIMARY KEY,
    user_id INT UNIQUE NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    bio TEXT,
    FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE
);

🔹 UserProfiles.user_id is both a foreign key and unique, ensuring a 1:1 relationship.


2. One-to-Many (1:M) #

A one-to-many relationship means each record in Table A can be associated with multiple records in Table B.

erDiagram
    Departments ||--o{ Employees : "has many"
    Departments {
        int department_id PK
        string name
    }
    Employees {
        int employee_id PK
        string name
        int department_id FK
    }

Each department has multiple employees, but each employee belongs to only one department.

CREATE TABLE Departments (
    department_id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL UNIQUE
);

CREATE TABLE Employees (
    employee_id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES Departments(department_id) ON DELETE SET NULL
);

🔹 One department can have multiple employees, but each employee belongs to only one department.


3. Many-to-Many (M:N) #

A many-to-many relationship means multiple records in Table A can be associated with multiple records in Table B.

erDiagram
    Students ||--o{ StudentCourses : "enrolls in"
    Courses ||--o{ StudentCourses : "has students"
    
    Students {
        int student_id PK
        string name
    }
    Courses {
        int course_id PK
        string course_name
    }
    StudentCourses {
        int student_id PK, FK
        int course_id PK, FK
        date enrollment_date
    }

A student can enroll in multiple courses, and a course can have multiple students.

CREATE TABLE Students (
    student_id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

CREATE TABLE Courses (
    course_id SERIAL PRIMARY KEY,
    course_name VARCHAR(100) NOT NULL UNIQUE
);

CREATE TABLE StudentCourses (
    student_id INT,
    course_id INT,
    enrollment_date DATE DEFAULT CURRENT_DATE,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES Students(student_id) ON DELETE CASCADE,
    FOREIGN KEY (course_id) REFERENCES Courses(course_id) ON DELETE CASCADE
);

🔹 The StudentCourses table acts as a junction table to establish the many-to-many relationship.