SonicJs has a simple yet flexible data model. We have a core data model with only a few base entities (which map to tables).
Each entity has a JSON based "data" property that can contain any data shape (aka "schema") desired by the site administrator. This enables site administrators to change their detailed data model (the part inside the JSON based "data" property) on the fly and instantly be able to create instances of this model with zero coding. This is possible because SonicJs' form builder is capable of generating create/edit forms on the fly for any data model defined as a content type within SonicJs.
The Data Model documentation is provided for anyone doing core development on the data access layer. In practice, you will rarely need to understand the underlying data model while building custom themes/modules.
If you prefer reading code, here is the location of the schema files. As you can see, there are only 4 main entities used for the entire platform.
| |-- data/
| | `-- entity/
| | `-- ContentSchema.js
| | `-- SessionSchema.js
| | `-- TagSchema.js
| | `-- UserSchema.js
The content entity is the main entity used in SonicJs. For most projects, well over 90% of your site content with be an instance of the content entity.
The user entity contains email, password and various profile properties for authenticated site/app users. Similar to the content entities data property, the user entities profile property is a dynamic field that can hold any data (properties and arrays) as specified by the site administrator using the drag and drop content type editor.
User sessions are stored in the data to enable SonicJs to be installed across multiple server nodes in production.
Tags allow for content and users to be categorized. Tag are a many-to-many relationship for both users and content.