Education Data Model
Diagram
The following diagram shows the main models of the Edlink Education Data Model.
Example Hierarchy
The following is an example of a hierarchy for a traditional school's mapping to the Edlink data model.
Type | Example |
---|---|
District | Springfield School District |
School | Springfield Elementary School |
Session | Fall 2021 |
Course | English 101 |
Class | Mrs. Krabappel's English 101 |
Section | Mrs. Krabappel's English 101 Period 3 |
Person | Lisa Simpson |
Enrollment | Lisa Simpson enrolled in Mrs. Krabappel's English 101 Period 3 |
Agent | Marge Simpson as Lisa Simpson's parent |
Breaking Down The Data Model
At first, this model may seem complicated, but we can break it down to simplify what is happening. The model is designed to support the varying options that Learning Management Systems and Student Information Systems support.
Let's start with the district-to-school relationship. For any data source that we have, we can expect there will be at least one district and one school. There can be more than one school in a district. We can take our data model above and focus on each model and only those relationships connected to it to make things easier to understand.
Before we begin, we need to understand the cardinalities of data models. Technically, cardinality is the numerical relationship between rows of one table and rows in another.
One-To-Many
For example, a child can have one birthing parent, but a birthing parent can have many children. This relationship is what we would describe as a many-to-many relationship.
One-To-One
On the other hand, in the United States, you can only be married to one person. We describe this relationship as a one-to-one relationship.
Many-To-Many
Another type of relationship is being a member of a group. We can have many groups, and each person can be in many different groups. We describe this relationship as a many-to-many relationship.
Symbols
We use the following symbols to represent these relationships in our diagrams. More specific symbols represent the relationships more accurately, but we will ignore those other details for simplicity.
District
A District is the highest level model in the hierarchy. School, Session, Person, and Course all belong to a District. An example of a district would be Springfield School District.
The Edlink API will return the data as JSON. So for the district, what the API returns will look like the following:
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-05T20:32:40.454Z",
"updated_date": "2021-07-12T21:44:23.126Z",
"name": "Gravity Falls School District",
"locale": "en",
"time_zone": "America/Los_Angeles",
"location": {},
"properties": {}
}
School
A School belongs to a district. A Person can belong to many Schools. Session, Course, and Class can belong to a School. An example of a School would be Springfield Elementary School.
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-05T20:32:40.454Z",
"updated_date": "2021-07-12T21:44:23.126Z",
"name": "Springfield Elementary School",
"grade_levels": ["01", "02", "03", "04", "05"],
"locale": "en",
"time_zone": "America/Chicago",
"location": {},
"properties": {},
"district_id": "00000000-0000-0000-0000-000000000000"
}
Session
A Session is a time period. It can belong to a District or a School, and it can be associated with Class or a Course. An example of a Session would be Fall 2021.
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-13T17:45:27.548Z",
"updated_date": "2021-07-13T17:45:27.548Z",
"name": "Fall 2021",
"start_date": "2021-07-01T00:00:00.000Z",
"end_date": "2022-01-01T00:00:00.000Z",
"state": "active",
"type": "semester",
"properties": {},
"school_id": "00000000-0000-0000-0000-000000000000",
"district_id": "00000000-0000-0000-0000-000000000000"
}
Person
A Person belongs to a District. A Person can belong to many Schools. An Enrollment allows a Person to be associated with a Class or Section. An example of a Person would be Lisa Simpson.
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-13T17:45:39.937Z",
"updated_date": "2021-07-13T17:45:39.937Z",
"first_name": "George",
"middle_name": "Oscar",
"last_name": "Bluth",
"display_name": "Gob Bluth",
"picture_url": "https://static.wikia.nocookie.net/arresteddevelopment/images/7/79/GOB_on_segway.jpg",
"roles": ["student"],
"email": "gob.bluth@example.com",
"phone": "12345556789",
"locale": "en",
"time_zone": "America/Los_Angeles",
"graduation_year": 1996,
"grade_levels": ["PS"],
"demographics": {},
"properties": {},
"district_id": "00000000-0000-0000-0000-000000000000",
"school_ids": ["00000000-0000-0000-0000-000000000000"]
}
Course
a Course model belongs to a District or School. A Class is an instance of a Course. A Session specifies the time dimensions of the Course. An example of a Course would be English 101.
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-13T17:45:27.570Z",
"updated_date": "2021-07-13T17:45:27.570Z",
"name": "Data Structures & Algorithms",
"code": "CS 425",
"grade_levels": [],
"subjects": ["CEDS.21"],
"properties": {},
"session_id": "00000000-0000-0000-0000-000000000000",
"school_id": "00000000-0000-0000-0000-000000000000",
"district_id": "00000000-0000-0000-0000-000000000000"
}
Class
A Class is an instance of Course in which a Person can be enrolled. A Class belongs to School and a Course. A Class can also be associated with a Person through an Enrollment. Multiple Sessions can be associated with a Class to specify the time dimensions of the Class. A Section is used by some systems to group students within a Class. An example of a Class would be Mrs. Krabappel's English 101.
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-13T17:45:27.685Z",
"updated_date": "2021-07-13T17:45:27.685Z",
"name": "Defense Against the Dark Arts",
"description": null,
"picture_url": null,
"grade_levels": ["06"],
"subjects": ["CEDS.08"],
"periods": ["1"],
"state": "active",
"locale": null,
"time_zone": null,
"properties": {},
"session_ids": ["00000000-0000-0000-0000-000000000000"],
"course_id": "00000000-0000-0000-0000-000000000000",
"school_id": "00000000-0000-0000-0000-000000000000"
}
Section
This model has been formally deprecated. Read more in the Deprecating Sections document.
A Section is used by some systems to group students within a Class. A Section can also be associated with a Person through an Enrollment. Many systems don't use sections. An example of a Section would be Mrs. Krabappel's English 101 Period 3
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-13T17:45:27.645Z",
"updated_date": "2021-07-13T17:45:27.645Z",
"name": "Section 3",
"description": null,
"picture_url": null,
"state": "active",
"locale": "en",
"time_zone": "America/Chicago",
"properties": {},
"periods": ["06"],
"class_id": "00000000-0000-0000-0000-000000000000"
}
Enrollment
An Enrollment model represents when a Person has been enrolled in a Class. For some systems, a Person can be associated with a Section through an Enrollment. An example of an Enrollment would be Lisa Simpson enrolled in Mrs. Krabappel's English 101 Period 3.
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"created_date": "2021-07-13T17:45:27.674Z",
"updated_date": "2021-07-13T17:45:27.674Z",
"start_date": null,
"end_date": null,
"role": "teacher",
"primary": null,
"state": "active",
"properties": {},
"person_id": "00000000-0000-0000-0000-000000000000",
"class_id": "00000000-0000-0000-0000-000000000000",
"section_id": "00000000-0000-0000-0000-000000000000"
}
Agent
An Agent model represents the relationship between two Person models. A common example would be between a parent and child. The observer_id would be the parent's person_id and the target_id would be the student's person_id. Another similar example would be between a student and their guardian. An example of an Agent would be Marge Simpson as Lisa Simpson's parent.
JSON
{
"id": "00000000-0000-0000-0000-000000000000",
"relationship": "parent",
"properties": {},
"observer_id": "00000000-0000-0000-0000-000000000000",
"target_id": "00000000-0000-0000-0000-000000000000"
}