# Naming conventions ##### **General** - Decide per module if abbreviation (e.g. *prs* for Personnel module) or full name (e.g. *leave*) will be used for database Objects. - Do not use spaces in the names of database objects. - Avoid using **ntext**, **text**, and **image** data types in new development work. Use nvarchar (max), varchar (max), and varbinary (max) instead. **Note:** The parent / grouping determines the module the data is stored on E.g. EmployeePDPs (an employee’s PDP’s) vs. pdpPeriod (a PDP’s periods) **Table 1 : Database Module Abbreviations**
**Abbreviation** **Module**
cc Career Conversation
cfg Configuration
cl Catalogue
com Communication (Import / Export)
cpd Credits
dbd Dashboards
ab Assessment Builder
ee Employee Evaluation
el2 E-Learning v2
el e-Learning
els Learning Store
em Event Management / Training and Scheduling
fais FAIS
ate Ask The Expert/ Discussion Forum
icn Icodeon
ir Internal Relations / Disciplinary Actions
jl Job Leveling
jp Job Profiler
leave Leave Management - New
lic Licences
mc Mentors and Coaches
ntf Notifications
org Organisational Structure
pdm Performance Management
pdp Personal Development Plan
prc HR Processes
prs Personnel
pw Pathways
rb Report Builder
rec Recruitment
rem Remuneration
rp Resource Planning
rpt Reports / Report Management
sms SMS Notifications
sr Salary Review
ss Salary Scenario
sty System Framework
sys System Administration
tal Talent Management - New
sc Succession and Career Planning
tM Talent Management - Old
txAudit Auditing - Old
wf Work Flows
tr\_ Trigger
##### **Tables** - A table name must always be prefixed with the module name abbreviation (see above). - A database table name must always be plural - *prsEmployees* – There will most likely be more than one employee in the system - *LeaveGroupTypes* – Each Leave Group can have one or more Leave Type - *eeImports* – Only one import can run at a time - *pdpStatuses* – There are multiple statuses for the module - A column name must be the shortest descriptive name possible - Do not specify module prefix e.g.

***Correct column name*** *EmployeeId*

***Incorrect column name** prsEmployeeId*

- **Exceptional case:** If more than one column in the same table are the “same” e.g. *CategoryId*, specify module prefix e.g. *cpdCategoryId, pdpCategoryId* - A column name must refer to a single and not multiple instances - Use *UnitId* instead of *UnitsId* - Rather use **varchar(max)** instead of **text** or **varchar(8000)** types for string columns where applicable - Each table that has a single identity column must also have a clustered primary key with the following naming convention: - PK\_{*TableName*}\_{*IdentityColumn*} - A foreign key constraint name must be in the following format: - FK\_{*TableName*}\_{*Column1*} ##### **Views** - A View’s name must follow the same convention as table names (add *View* at end of name) - Use *prsTerminatedEmployeesView* instead of *viewTerminatedEmployees* - *naming: {prefix}{Description of the data resturned}View* ##### **User-Defined Functions** - A User-Defined function's name must follow the same convention as table names. - A user defined function must be prefixed with the module (do not add *fnc* prefix) - Use *el2SelectScholarshipManagerNotificationDays* instead of *fncSelectScholarshipManagerNotificationDays* - General user defined functions (module-unspecific) can be the description of the output - Use *Split* instead of *fncSplit* - Use *CleanHtmlTags* instead of *fncCleanHTMLTags* ##### **Stored Procedures** - A stored procedure name must always be prefixed with the module. - A stored procedure must indicate it’s intention by using a keyword on what action will be performed - Select - InsertUpdate - Insert - Update - Delete - Check/ Verify - Copy - Archive - Reset - Apply - Examples - prsSelectEmployeesAll - prsSelectEmployeesList - paging - prsSelectEmployee - single - prsInsertUpdateEmployee - prsDeleteEmployee - prsCheckEmployeeIDNumber - styResetUserPassword - pdmCopyContract ##### **Temporary Tables** - Single use temp table: #{Descriptive table name} - Global use temp table: ##{Descriptive table name} - Variable temp table @{Descriptive table name} ##### **Common Table Expressions (CTE's)** - CTE table names are declared with the prefix **cte.** ##### **Indexes** - A non-clustered index name must be in the following format: - IX\_{*TableName*}\_{*Column1*}\_{*Column2*} - Indexes have a maximum size of 900 or 1700 depending on the index type and SQL version. Do not create a non-clustered index on a column with a max length of more than 500. - Always check with the Database Administrator whether indexes should be created during development. Assume that indexes will always be created. ##### **Constraints** - A default constraint name must be in the following format: - DF\_{*TableName*}\_{*Column1*} - A unique constraint name must be in the following format: - UQ\_{*TableName*}\_{*Column1*}\_{*Column2*} - A check constraint name must be in the following format: - CK\_{*TableName*}\_{*Column1*}\_{*Column2*} - Columns with Default value constraint should not allow NULLs. TODO: Add a link to main page for each section