> For the complete documentation index, see [llms.txt](https://exiang.gitbook.io/yeebase/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://exiang.gitbook.io/yeebase/fundamental-concept.md).

# Fundamental Concept

Yee Base uses naming conventions like prefixes and pre-defined keywords on variables to automate and simplify repetitive works.

### Database Table Naming

Table should be name in singular form and all lowercase (e.g. organization, individual, event). Use underscore '\_' if the table name is form by 2 words (e.g. startup\_stage).

If it is a many-to-many relationship table, for example: Intermediate table startup\_stage2intake links startup\_stage table with intake table. Ordering of table name in this format can be easily decided by asking this question: "who is linking to who?". In this case, we are linking many startup stages to an intake table.

### Database Column Naming

| Type      | Description                                                                                                                                                                                                                                                                                     | Example                                      |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| ID        | following Yii framework concept, each table should have an auto incremental `id` column.                                                                                                                                                                                                        | `id`                                         |
| Code      | Use as a unique alphanumerical identifier of a record. Could be UUID too. A foreign table who links to this table will use `country_code` for example to refer it. However, not all column ended with `_code` is refer to a unique foreign column (such as `as_role_code`, `external_code` ...) | `code`                                       |
| Slug      | Like code but to expose to the public thru the URL, normally hold value in URL friendly format like 'hello-world-123'                                                                                                                                                                           | `slug`                                       |
| String    | None numerical value within 255 characters do not have any naming convention to the column name                                                                                                                                                                                                 | `full_name`, `location`                      |
| Text      | Like string, but plain text with a larger range of value using data type like `text` or `longtext` has a prefix of `text_`                                                                                                                                                                      | `text_note`, `text_short_description`        |
| HTML Text | Like text, but rich HTML text a prefix of `html_`                                                                                                                                                                                                                                               | `html_content`, `html_body`                  |
| Date      | Yee store date in database using unixtimestamp format. Prefix with name `date_` and name in past tense (optional). All table have default field of `date_added` and `date_modified` to track when a record is created and last modified.                                                        | `date_added`, `date_modified`, `date_submit` |
| URL       | Prefix of `url_` and usually store like String using `varchar (255)`                                                                                                                                                                                                                            | `url_website`                                |
| Image     | Store the relative path of user uploaded image file to the upload folder (in s3).                                                                                                                                                                                                               | `image_cover`, `image_photo`                 |
| File      | Store the relative path of user uploaded none image file to the upload folder (in s3).                                                                                                                                                                                                          | `file_proof`                                 |
| Ordering  | Stored as `double` data type in database, default to `0`, larger number on top, indicated this table has a sorting mechanism for admin to rearrange data manually.                                                                                                                              | `ordering`                                   |
| Active    | A common boolean field to use as 'soft delete' for use case where data is never deleted from a table. Data type set to `tinyint (1)` and default to value `1`.                                                                                                                                  | `is_active`                                  |
| Boolean   | Like Active column, boolean column start with prefix `is_` and followed by an adjective or past tense verb. Data type set to `tinyint (1)` and default to value `1`.                                                                                                                            | `is_highlight`                               |
| Enum      | No specific prefix but use the unique `enum` data type.                                                                                                                                                                                                                                         | `status`                                     |
| Json      | Prefix with `json_` and stored as `text` or `longtext` data type with NULL. This is a special method to allow unstructured value store in a specific records for developer flexibility.                                                                                                         | `json_extra`                                 |
| Spatial   | Information about a physical object that can be represented by numerical values in a geographic coordinate system. Prefix with `latlong_` and stored as `point`.                                                                                                                                | `latlong_address`                            |
| I18N      | Suffix with the i18n code such as `_en` mark the column is for specific languages usage.                                                                                                                                                                                                        | `title_en`, `title_ms`, `title_zh_cn`        |
