Bird
Raised Fist0
Microservicessystem_design~10 mins

Event schema design in Microservices - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a table for storing event data with an event ID as the primary key.

Microservices
CREATE TABLE events (event_id [1] PRIMARY KEY, event_name VARCHAR(100));
Drag options to blanks, or click blank then click option'
AINT
BVARCHAR(50)
CDATE
DTEXT
Attempts:
3 left
💡 Hint
Common Mistakes
Using VARCHAR for event_id which is less efficient for keys.
Using DATE type which is not suitable for IDs.
2fill in blank
medium

Complete the code to add a timestamp column to record when the event occurred.

Microservices
ALTER TABLE events ADD COLUMN event_time [1];
Drag options to blanks, or click blank then click option'
ATIMESTAMP
BINT
CVARCHAR(50)
DBOOLEAN
Attempts:
3 left
💡 Hint
Common Mistakes
Using INT which cannot store date/time.
Using BOOLEAN which is only true/false.
3fill in blank
hard

Fix the error in the event schema by choosing the correct data type for event payload storage.

Microservices
CREATE TABLE event_payloads (payload_id INT PRIMARY KEY, event_id INT, payload [1]);
Drag options to blanks, or click blank then click option'
AINT
BTEXT
CVARCHAR(255)
DBOOLEAN
Attempts:
3 left
💡 Hint
Common Mistakes
Using VARCHAR(255) which may be too short for large payloads.
Using INT or BOOLEAN which cannot store text.
4fill in blank
hard

Fill both blanks to create a foreign key relationship between event_payloads and events tables.

Microservices
ALTER TABLE event_payloads ADD CONSTRAINT fk_event FOREIGN KEY ([1]) REFERENCES [2](event_id);
Drag options to blanks, or click blank then click option'
Aevent_id
Bevents
Cpayload_id
Devent_payloads
Attempts:
3 left
💡 Hint
Common Mistakes
Using payload_id as foreign key which is incorrect.
Referencing the wrong table.
5fill in blank
hard

Fill all three blanks to create an index on event_time and event_name for faster queries.

Microservices
CREATE INDEX idx_[1] ON events ([2], [3]);
Drag options to blanks, or click blank then click option'
Atime_name
Bevent_time
Cevent_name
Devent_id
Attempts:
3 left
💡 Hint
Common Mistakes
Using event_id in the index which is already primary key.
Choosing a non-descriptive index name.

Practice

(1/5)
1. What is the main purpose of an event schema in microservices?
easy
A. To define the structure and content of messages exchanged between services
B. To store user data in a database
C. To create user interfaces for microservices
D. To manage network connections between services

Solution

  1. Step 1: Understand event schema role

    An event schema defines how messages look when services talk to each other.
  2. Step 2: Identify correct purpose

    It ensures all services understand the message format and data.
  3. Final Answer:

    To define the structure and content of messages exchanged between services -> Option A
  4. Quick Check:

    Event schema = message format [OK]
Hint: Event schema = message format for services [OK]
Common Mistakes:
  • Confusing event schema with database storage
  • Thinking event schema manages UI or network
  • Assuming event schema is about service deployment
2. Which of the following is a correct JSON snippet for an event schema with type and timestamp?
easy
A. {eventType: "OrderCreated", "timestamp": "2024-06-01T12:00:00Z"}
B. {"eventType": OrderCreated, "timestamp": 2024-06-01T12:00:00Z}
C. {"eventType": "OrderCreated", timestamp: "2024-06-01T12:00:00Z"}
D. {"eventType": "OrderCreated", "timestamp": "2024-06-01T12:00:00Z"}

Solution

  1. Step 1: Check JSON syntax rules

    Keys and string values must be in double quotes; commas separate pairs.
  2. Step 2: Validate each option

    {"eventType": "OrderCreated", "timestamp": "2024-06-01T12:00:00Z"} uses correct quotes and format; others miss quotes or have invalid syntax.
  3. Final Answer:

    {"eventType": "OrderCreated", "timestamp": "2024-06-01T12:00:00Z"} -> Option D
  4. Quick Check:

    Valid JSON = {"eventType": "OrderCreated", "timestamp": "2024-06-01T12:00:00Z"} [OK]
Hint: JSON keys and strings need double quotes [OK]
Common Mistakes:
  • Missing quotes around keys or string values
  • Using unquoted date/time strings
  • Omitting commas between pairs
3. Given this event schema snippet:
{"eventType": "UserSignedUp", "timestamp": "2024-06-01T10:00:00Z", "data": {"userId": 123, "email": "user@example.com"}}

What will be the value of data.email in the event?
medium
A. 123
B. "UserSignedUp"
C. "user@example.com"
D. 2024-06-01T10:00:00Z

Solution

  1. Step 1: Locate the data field in the event

    The event has a nested object under "data" with keys "userId" and "email".
  2. Step 2: Identify the value of data.email

    The value for "email" is "user@example.com" as a string.
  3. Final Answer:

    "user@example.com" -> Option C
  4. Quick Check:

    data.email = "user@example.com" [OK]
Hint: Look inside data object for email key [OK]
Common Mistakes:
  • Confusing userId with email
  • Picking eventType or timestamp instead
  • Ignoring nested structure
4. Identify the error in this event schema:
{"eventType": "PaymentProcessed", "timestamp": "2024-06-01T15:00:00Z", "data": {"amount": 100, "currency": USD}}
medium
A. Missing comma after amount key
B. Missing quotes around the currency value USD
C. timestamp format is incorrect
D. eventType should be lowercase

Solution

  1. Step 1: Check JSON value types

    String values must be in double quotes; USD is unquoted here.
  2. Step 2: Verify other parts

    Comma after amount is present, timestamp format is ISO standard, eventType case is allowed.
  3. Final Answer:

    Missing quotes around the currency value USD -> Option B
  4. Quick Check:

    Strings need quotes [OK]
Hint: String values must have quotes in JSON [OK]
Common Mistakes:
  • Ignoring missing quotes on string values
  • Thinking timestamp format is wrong
  • Assuming key case matters in JSON
5. You want to design an event schema for a microservice that sends user profile updates. Which design choice improves schema flexibility for future changes?
hard
A. Include a 'metadata' field to hold optional extra info
B. Fix the schema to only allow 'name' and 'email' fields
C. Use a flat schema without nested objects
D. Exclude timestamps to reduce message size

Solution

  1. Step 1: Understand schema flexibility needs

    Flexible schemas allow adding new info without breaking existing services.
  2. Step 2: Evaluate options for flexibility

    Adding a 'metadata' field lets you add optional data later safely.
  3. Final Answer:

    Include a 'metadata' field to hold optional extra info -> Option A
  4. Quick Check:

    Optional metadata = flexible schema [OK]
Hint: Add metadata field for optional future data [OK]
Common Mistakes:
  • Fixing schema too rigidly limits future changes
  • Removing timestamps loses event timing info
  • Avoiding nested objects reduces clarity