✅ Day 10: Data Modeling in Cassandra
๐ฏ Objective:
Understand how to model data in Cassandra using query-first design – designing tables based on how you query, not how data is structured relationally.
๐ 1. Key Principles of Cassandra Data Modeling
- Query-based design: Every table supports one query pattern.
- Denormalization is OK: Duplicate data for different queries.
- Avoid joins and multi-table operations
- One table per query pattern is common
๐ 2. Real-World Use Case Example
Use Case: Online Learning App
Entities:
- Students
- Courses
- Enrollments
- Attendance
- Assessments
๐ง 3. Sample Table Designs
➤ Table 1: student_by_id
Query: Get student details by ID
CREATE TABLE test_lab.student_by_id (
student_id uuid PRIMARY KEY,
name text,
email text,
enrolled_on timestamp
);
➤ Table 2: courses_by_student
Query: List all courses for a student
CREATE TABLE test_lab.courses_by_student (
student_id uuid,
course_id text,
course_name text,
instructor text,
PRIMARY KEY ((student_id), course_id)
);
➤ Table 3: attendance_by_class
Query: Get attendance by class and date
CREATE TABLE test_lab.attendance_by_class (
class_id text,
attendance_date date,
student_id uuid,
status text,
PRIMARY KEY ((class_id, attendance_date), student_id)
);
⚖️ 4. Denormalized Table for Assessments
CREATE TABLE test_lab.assessments_by_course (
course_id text,
student_id uuid,
exam_type text,
marks int,
PRIMARY KEY ((course_id), student_id, exam_type)
);
๐ 5. Modeling Guidelines Recap
Relational Concept | Cassandra Strategy |
---|---|
Normalize | Denormalize |
Join | Create separate table |
Foreign Keys | Not used in Cassandra |
ACID Transactions | Design around partitions |
๐งช Day 10 Lab Tasks
- Design 3–4 tables for a simple application (blog, app, school, store)
- Use proper partition and clustering keys
- Avoid joins – assume each table is optimized for a specific query
- Practice inserting sample data and running sample queries
✅ Checklist
Task | Done |
---|---|
Understood query-first design | ✅ |
Created tables for multiple query patterns | ✅ |
Used compound partition & clustering keys | ✅ |
Avoided relational modeling concepts | ✅ |