Data Model
Table of Contents
Graph Model
Graph Vertices and Edges
The set of vertices (entities) and edges (relationships) of the graph model
Vertex (Source) | Edge Type | Relationship Type | Vertex (Target) | Notes | Required |
---|---|---|---|---|---|
Profession | Applies | 1:many | Discipline | Top most level of categorization | * |
Discipline | Defines | 1:many | Role | Groups of related roles within a profession | * |
AppliedBy | 1:1 | Profession | 1 | ||
Role | Requires | 1:many | Responsibility | Individual role mapped to an employee | 1+ |
Requires | 1:many | Competency | 1+ | ||
RequiredBy | 1:1 | Discipline | 1 | ||
Succeeds | 1:1 | Role | Supports career progression between roles | 1 | |
Precedes | 1:1 | Role | Supports career progression between roles | 1 | |
AssignedTo | 1:many | User Profile | * | ||
Responsibility | Expects | 1:many | Key Result | A group of expected outcomes and key results for employees within a role | 1+ |
ExpectedBy | 1:1 | Role | 1 | ||
Competency | Describes | 1:many | Behavior | A set of behaviors that contribute to success | 1+ |
DescribedBy | 1:1 | Role | 1 | ||
Key Result | ExpectedBy | 1:1 | Responsibility | The expected outcome of performing a responsibility | 1 |
Behavior | ContributesTo | 1:1 | Competency | The way in which one acts or conducts oneself | 1 |
User Profile | Fulfills | many:1 | Role | 1+ | |
Authors | 1:many | Entry | * | ||
Reads | many:many | Entry | * | ||
Entry | SharedWith | many:many | User Profile | Business logic should add manager to this list by default. These users should only have read access. | * |
Demonstrates | many:many | Competency | * | ||
Demonstrates | many:many | Behavior | * | ||
Demonstrates | many:many | Responsibility | * | ||
Demonstrates | many:many | Result | * | ||
AuthoredBy | many:1 | UserProfile | 1+ | ||
DiscussedBy | 1:many | Commentary | * | ||
References | many:many | Artifact | * | ||
Competency | DemonstratedBy | many:many | Entry | * | |
Behavior | DemonstratedBy | many:many | Entry | * | |
Responsibility | DemonstratedBy | many:many | Entry | * | |
Result | DemonstratedBy | many:many | Entry | * | |
Commentary | Discusses | many:1 | Entry | * | |
Artifact | ReferencedBy | many:many | Entry | 1+ |
Graph Properties
The full set of data properties available on each vertex and edge
Vertex/Edge | Property | Data Type | Notes | Required |
---|---|---|---|---|
(Any) | ID | guid | 1 | |
Profession | Title | String | 1 | |
Description | String | 0 | ||
Discipline | Title | String | 1 | |
Description | String | 0 | ||
Role | Title | String | 1 | |
Description | String | 0 | ||
Level Band | String | SDE, SDE II, Senior, etc | 1 | |
Responsibility | Title | String | 1 | |
Description | String | 0 | ||
Competency | Title | String | 1 | |
Description | String | 0 | ||
Key Result | Description | String | 1 | |
Behavior | Description | String | 1 | |
User Profile | Theme selection | string | there are only 2: dark, light | 1 |
PersonaId | guid[] | there are only 2: User, Admin | 1+ | |
UserId | guid | Points to AAD object | 1 | |
DeploymentRing | string[] | Is used to deploy new versions | 1 | |
Project | string[] | list of user created projects | * | |
Entry | Title | string | 1 | |
DateCreated | date | 1 | ||
ReadyToShare | boolean | false if draft | 1 | |
AreaOfImpact | string[] | 3 options: self, contribute to others, leverage others | * | |
Commentary | Data | string | 1 | |
DateCreated | date | 1 | ||
Artifact | Data | string | 1 | |
DateCreated | date | 1 | ||
ArtifactType | string | describes the artifact type: markdown, blob link | 1 |
Vertex Descriptions
Profession
Top most level of categorization
{
"title": "Software Engineering",
"description": "Description of profession",
"disciplines": []
}
Discipline
Groups of related roles within a profession
{
"title": "Site Reliability Engineering",
"description": "Description of discipline",
"roles": []
}
Role
Individual role mapped to an employee
{
"title": "Site Reliability Engineering IC2",
"description": "Detailed description of role",
"responsibilities": [],
"competencies": []
}
Responsibility
A group of expected outcomes and key results for employees within a role
{
"title": "Technical Knowledge and Domain Specific Expertise",
"results": []
}
Competency
A set of behaviors that contribute to success
{
"title": "Adaptability",
"behaviors": []
}
Key Result
The expected outcome of performing a responsibility
{
"description": "Develops a foundational understanding of distributed systems design..."
}
Behavior
The way in which one acts or conducts oneself
{
"description": "Actively seeks information and tests assumptions."
}
User
The user object refers to whom a person is. We do not store our own rather use Azure OIDs.
User Profile
The user profile contains any user settings and edges specific to Memory.
Persona
A user may hold multiple personas.
Entry
The same entry object can hold many kinds of data, and at this stage of the project we decide that we will not store external data, so it's up to the user to provide a link to the data for a reader to click into and get redirected to a new tab to open.
Note: This means that in the web app, we will need to ensure links are opened in new tabs.
Project
Projects are just string fields to represent what a user wants to group their entries under.
Area of Impact
This refers to the 3 areas of impact in the venn-style diagram in the HR tool. The options are: self, contributing to impact of others, building on others' work.
Commentary
A comment is essentially a piece of text. However, anyone that an entry is shared with can add commentary on an entry.
Artifact
The artifact object contains the relevant data as markdown, or a link to the relevant data.
Full Role JSON Example
{
"id": "abc123",
"title": "Site Reliability Engineering IC2",
"description": "Detailed description of role",
"responsibilities": [
{
"id": "abc123",
"title": "Technical Knowledge and Domain Specific Expertise",
"results": [
{
"description": "Develops a foundational understanding of distributed systems design..."
},
{
"description": "Develops an understanding of the code, features, and operations of specific products..."
}
]
},
{
"id": "abc123",
"title": "Contributions to Development and Design",
"results": [
{
"description": "Develops and tests basic changes to optimize code..."
},
{
"description": "Supports ongoing engagements with product engineering teams..."
}
]
}
],
"competencies": [
{
"id": "abc123",
"title": "Adaptability",
"behaviors": [
{ "description": "Actively seeks information and tests assumptions." },
{
"description": "Shifts his or her approach in response to the demands of a changing situation."
}
]
},
{
"id": "abc123",
"title": "Collaboration",
"behaviors": [
{
"description": "Removes barriers by working with others around a shared need or customer benefit."
},
{
"description": " Incorporates diverse perspectives to thoroughly address complex business issues."
}
]
}
]
}
API Data Model
Because there is no internal edges or vertices that need to be hidden from API consumers, the API will expose a 1:1 mapping of the current data model for consumption. This is subject to change if our data model becomes too complex for downstream users.