---
title: Data Models
description: "--- Among the data models presented within Elements, several data models will contain the following properties. In all cases the properties represent the same consistent concept. - [**[id](https://namazustudios.com/glossary/id/)**](#id-property) is always the system-assigned unique [id](https://namazustudios.com/glossary/id/) of a particular object. - [**[name](https://namazustudios.com/glossary/name/)**](#name-property)…"
url: "https://namazustudios.com/docs/general-concepts/data-models/"
updated: "2026-08-13"
category: General Concepts
---

# Data Models

---

Among the data models presented within Elements, several data models will contain the following properties. In all cases the properties represent the same consistent concept.

- [**[id](https://namazustudios.com/glossary/id/)**](#id-property) is always the system-assigned unique [id](https://namazustudios.com/glossary/id/) of a particular object.
- [**[name](https://namazustudios.com/glossary/name/)**](#name-property) represents a unique system-readable reference to the particular object.
- [**[Metadata](https://namazustudios.com/glossary/metadata/)**](#metadata-property) represents [User](https://namazustudios.com/glossary/user/) editable [Metadata](https://namazustudios.com/glossary/metadata/) that Elements will store with each object for more information on effective using [Metadata](https://namazustudios.com/glossary/metadata/).
- [**tags**](#tags-property) are a list or set of words used to categorize and filter content.
- [**displayName**](#display-name-property) represents a [name](https://namazustudios.com/glossary/name/) used to refer to the object within the UI and potentially the final page or [Application](https://namazustudios.com/glossary/application/).
- [**timestamp**](#timestamp-property) represents a time stamp or similar property.

### [id](https://namazustudios.com/glossary/id/) Property [#id-property](#id-property)

**[id](https://namazustudios.com/glossary/id/)** always refers to the system-assigned unique [id](https://namazustudios.com/glossary/id/) of a particular object. Due to the server [authoritative](https://namazustudios.com/glossary/authoritative/) nature of Elements, the unique [id](https://namazustudios.com/glossary/id/) will always be the unique identifier for a particular object. In all cases, the identifier is generated server-side.

#### Tips for Using the [id](https://namazustudios.com/glossary/id/) Property [#tips-on-using-id-effectively](#tips-on-using-id-effectively)

- Always treat IDs as opaque values. For example:
- Do not assume any particular format of the [id](https://namazustudios.com/glossary/id/). At the time of this writing, all server IDs are hex strings. There is not a strict requirement for future editions of Elements.
- Some IDs may contain encoded data. Unless specifically documented, do not assume that any IDs will always follow the same encoding format.
- IDs are always handled as strings in request and response objects.
- The server will always generate IDs.
- Some APIs will accept either an [id](https://namazustudios.com/glossary/id/) or a [name](https://namazustudios.com/glossary/name/) for certain operations. Unless otherwise specified, always pass the [id](https://namazustudios.com/glossary/id/).

### [name](https://namazustudios.com/glossary/name/) Property [#name-property](#name-property)

**[name](https://namazustudios.com/glossary/name/)** represents a unique system-readable reference to a particular object. The [name](https://namazustudios.com/glossary/name/) assigned to any object is always intended to be an alternative unique [id](https://namazustudios.com/glossary/id/) for the object. Understanding this is crucial for integrating backend scripts and client-side [Application](https://namazustudios.com/glossary/application/) code.

Unless otherwise specified, the [name](https://namazustudios.com/glossary/name/) can be used as a programmatically unique [id](https://namazustudios.com/glossary/id/) in all parts of the code. Additionally, two unrelated items may share a [name](https://namazustudios.com/glossary/name/). For example an [Item](../../core-features/digital-goods#items) and a [Mission](../core-features/progress-and-missions) may share a [name](https://namazustudios.com/glossary/name/), however two Items may not share the same [name](https://namazustudios.com/glossary/name/). Names are case-sensitive and must be an alphanumeric string with no spaces.

#### Tips for Using the [name](https://namazustudios.com/glossary/name/) Property [#tips-on-using-names-effectively](#tips-on-using-names-effectively)

- Use a consistent convention. For example, all lowercase letters with underscore separation. If, for example, you wish to model a Paper Hat as an [Item](https://namazustudios.com/glossary/item/). A good [name](https://namazustudios.com/glossary/name/) would simply be `paper_hat`. All code may not refer to this when fetching Paper Hat Items from the database.
- Use the [name](https://namazustudios.com/glossary/name/) wherever possible, unless there is a specific need to use the database [id](https://namazustudios.com/glossary/id/). This ensures that the scripting engine code can refer to the specific object even if the object has been deleted and recreated, such as may be the case during migration between two separate instances of Elements.
- Give all objects a clear [name](https://namazustudios.com/glossary/name/) that is obvious to the reader. This will avoid problems with ambiguity when designing your system.

### [Metadata](https://namazustudios.com/glossary/metadata/) Property [#metadata-property](#metadata-property)

**[Metadata](https://namazustudios.com/glossary/metadata/)** represents [User](https://namazustudios.com/glossary/user/) editable [Metadata](https://namazustudios.com/glossary/metadata/) that Elements will store with each [Item](https://namazustudios.com/glossary/item/). This data may be used for any purpose and will not be modified or touched by Elements in any way. Depending on the circumstance, this may or may not be editable by regular users. At the time of this writing, it is not possible to index by [Metadata](https://namazustudios.com/glossary/metadata/). At the time of this writing, all [Metadata](https://namazustudios.com/glossary/metadata/) must be written in a server-[authoritative](https://namazustudios.com/glossary/authoritative/) way. In other words, only superusers and scripts running in the backend may modify [Metadata](https://namazustudios.com/glossary/metadata/). This may be subject to future enhancements.

In all cases, [Metadata](https://namazustudios.com/glossary/metadata/) is a multi-layered key-value object. The admin panel allows for simple editing of [Metadata](https://namazustudios.com/glossary/metadata/) as key-value strings, as well as editing inline JSON [Metadata](https://namazustudios.com/glossary/metadata/). Some objects work with [Metadata](https://namazustudios.com/glossary/metadata/) schema, and full support for [Metadata](https://namazustudios.com/glossary/metadata/) schema is actively under development for all remaining system types.

#### Tips for Using the [Metadata](https://namazustudios.com/glossary/metadata/) Property [#tips-for-using-metadata-effectively](#tips-for-using-metadata-effectively)

- [Metadata](https://namazustudios.com/glossary/metadata/) is not indexed, so you should not make objects searchable via [Metadata](https://namazustudios.com/glossary/metadata/).
- [Metadata](https://namazustudios.com/glossary/metadata/) is meant to be used to to add custom fields to objects that do not have sufficient support for data on their own. For example, when attached to a [Profile](../../core-features/users-and-profiles#profile-metadata), [Metadata](https://namazustudios.com/glossary/metadata/) may represent the current exp, level, or status of equipment slots.
- In general, the [Metadata](https://namazustudios.com/glossary/metadata/) should not include secure or sensitive information.

### tags Property [#tags-property](#tags-property)

Tags are indexed for optimal querying from the database and should be used to quickly separate content when making API calls. Effectively using tags enables developers to quickly filter items as the tags are indexed and all APIs supporting tags support the querying of the tags. For example, items tagged with "armor" and "head" may represent helmets equipped to a character in a game.

#### Tips for Using the tags Property [#tips-for-using-tags-properly](#tips-for-using-tags-properly)

- When querying tags, they are always all-inclusive. For example if `paper_hat` has tags, `armor` and `head` will show up in searches for both `armor` and `head` only `armor`, or only `head`. It will never appear if `weapon` is specified in the search terms.
- There is no specific limit on tags, and while too many tags may run up against database limitations, practically speaking, Elements will allow far more tags than what is necessary for a majority of use cases.

### displayName Property [#display-name-property](#display-name-property)

The display [name](https://namazustudios.com/glossary/name/) is simply a [name](https://namazustudios.com/glossary/name/) to use when displaying the object in the admin console or potentially to end users. The displayName should not be indexed and should never be used to make data decisions or in programmatic code. It's simply there for human readability and visual reference.

### timestamp Property [#timestamp-property](#timestamp-property)

Elements represents timestamps and dates using the same notation used by the Java Virtual Machine. Timestamps are a 64-bit integer counting the number of milliseconds since the Unix Epoch (January 1, 1970). For more information see [System.currentTimeMillis()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/System.html#currentTimeMillis())
