--- title: "Database Schema" description: "Authelia Development Database Schema Guidelines" lead: "This section covers the database schema guidelines we use for development." date: 2022-11-09T09:20:18+11:00 draft: false images: [] menu: contributing: parent: "guidelines" weight: 320 toc: true aliases: [] --- ## Table Names 1. Should match in every database implementation. 2. Should be all lower case. 3. Should use singular form (i.e. not plural). 4. Should use the underscore character (`_`) between words. 5. Should only contain alphanumeric characters and the underscore character (`_`). 1. The underscore character (`_`): 1. Should always be used between words. 2. Should only be used: 1. Between words. 2. As a prefix for temporary tables. 2. Should start and end with only an alphabetic character, excluding specific exceptions mentioned elsewhere with prefix and suffix terminology. ## Column Names 1. Should match in every database implementation. 2. Should be all lower case. 3. Should only contain alphanumeric characters and the underscore character (`_`). 1. The underscore character (`_`): 1. Should always be used between words. 2. Should only be used between words. 2. Should only start and end with an alphabetic character. ## Key Names ### Foreign Keys Format: `__fkey` Where: - The table name is the name of the table the foreign key exists on. - The column name is the name of the column the foreign key is for. ### Unique Keys Format: `__key` Where: - The table name is the name of the table the unique key is on. - The key name is the name to describe this key. This can also be the column name it exists on. ### Primary Keys Most database engines don't allow customizing the primary key names. As such the primary key should not be explicitly set except to change it back to the default format.