[AccessD] Table naming conventions

Shamil Salakhetdinov shamil at users.mns.ru
Thu Mar 2 07:11:23 CST 2006


John,

AFAIS your naming conventions are based on LRNC (see e.g. Stan Leszinsky "MS 
Access 97 Expert Solutions").
One exception are field names - the recommended in LRNC way is to not use 
underscore and to use 3-4 chars standard abbreviations to prefix field 
names:

- Company - comp
- Person - pers
- Employee - empl or emp
...

I do use LRNC for the last 10 years. It  worked very well in many 
situations.

Best regards,
Shamil
--
Web: http://smsconsulting.spb.ru/shamil_s

----- Original Message ----- 
From: "John Colby" <jwcolby at ColbyConsulting.com>
To: "'Access Developers discussion and problem solving'" 
<accessd at databaseadvisors.com>
Sent: Thursday, March 02, 2006 2:12 PM
Subject: [AccessD] Table naming conventions


> Folks,
>
> There has been a bit of discussion in the past few days re naming
> conventions as applied to tables.  I have used conventions for many years
> and I sat down tonight and started documenting the conventions I use.  I
> have shared my conventions in the past and will do so again here.  I do
> these things because they work for me, in my environment.
>
> I have built a framework, which I use in any project where it is allowed.
> Having conventions allows me to make assumptions about how things will be
> handled, and write code that used those assumptions to make decisions. 
> Even
> if you do not use a framework, having objects defined in a consistent 
> manner
> can just generally make life easier.
>
> Feel free to discuss the methods and assumptions that I make, add how you 
> do
> things (and WHY) etc.  Don't bother calling the things I do stupid, if 
> they
> don't work for you, don't use them.  Share what does work for you, and WHY
> you do what you do.  If you do something exactly opposite of the way I do
> it, explain why you prefer to do it that way.  I find rules useless.  I 
> find
> reasons very useful.
>
> Table Definition Specification
> Tables are defined in a consistent manner so that they can be recognized 
> and
> worked with easily.  All of the definitions that I use have been 
> assimilated
> from other people's ideas or developed over time, and all such conventions
> exist to solve a problem, whether that be readability, distinguishing
> functionality or allowing the framework to make assumptions.
>
> Table definitions consist of several parts.
> 1. Tables always use an autonumber PK, whether it appears to need one
> or not.  This is done for a variety of reasons, ranging from divorcing the
> "table link" (PK/FK)from the unique index and making it trivial to change
> that unique index without changing the "table link", to the consistency of
> PK data type which allows specific assumptions in the framework.  The PK 
> is
> always a long integer, and a single field, which easily allows searches 
> and
> other programmatic manipulations that wouldn't be possible or would be
> tedious if the PK was a multi-field set.
> 2. Table naming conventions.  Tables are prefixed with 'tbl' so that as
> table names  are encountered in forms, reports and queries they can be
> distinguished from other objects such as queries.  Thus tblPerson,
> tblCompany, tblVehicle.
> 3. I have used other table prefixes to cause tables to group by type
> and be visually distinguishable from each other.  Tbl for main tables, 
> tlkp
> for lookup tables, tmm for many to many tables, ttmp for temporary tables
> etc.  There is a lot of discussion about whether grouping by type is
> preferable to grouping by functionality, i.e. all accounting tables group
> together, all shipping tables group together etc.  That is very much a
> 'preference' kind of thing.  I have done both, even within the same db. 
> It
> is possible to throw a "type" suffix on the end of the tables separated by
> an underscore if you care to group by function but be able to distinguish
> table type.  tblPeopleVehicle_MM for a many to many, tblState_LKP for a
> lookup.
> 4. Field naming conventions.  Field naming conventions have several
> parts.  In general field and table names should only change in the most 
> dire
> circumstances.  If any object name changes, I have to do a search and
> replace to find and fix them.  If there are a bunch of Fes working against 
> a
> single BE, it becomes a nightmare.
> a. Data type prefixes are never used in field names because of issues
> with data type changes.  There are just too many data types, and they are
> often changed well into a project, for very valid reasons.
> b. A prefix to the field name is created using the first two characters
> the table name where the table name is a single word - PEople, VEhicle,
> COmpany.  In cases where the table name is multiple words, the first
> character of each word is used.  InvoiceLineItem ILI, PeopleVehicle PV,
> CompanyProperty CP.  An underscore is used to distinguish the field name
> prefix from the rest of the field name.  PE_ID, PE_FName, PE_SSN.  Use of
> the first two characters if each word is acceptable to avoid collisions 
> and
> make the field prefix more readable.  PEopleVEhicle PEVE_ID.
>
> Obviously as a project gets large a table is required to track field name
> prefixes already used, but for small to medium sized projects this allows
> the developer to rapidly recognize which table a field comes from just 
> from
> the field name.  If this naming convention is rigorously followed then 
> every
> field in the db has a unique name, which allows "search and replace" type 
> of
> operations to be performed without manual intervention.
> c. IDs (PK/FKs) are distinguished by the capitalized characters 'ID'
> in the field name.
> d. PKs use the convention of Prefix characters, followed by an
> underscore followed by ID.  PE_ID, VE_ID, CO_ID.
> e. FKs use the convention of Prefix characters, followed by an
> underscore, followed by ID followed by the prefix characters of the 
> foreign
> table.  PV_IDPE, PV_IDVE. CP_IDCO.  By placing ID immediately following 
> the
> underscore, PKs and FKs can be immediately distinguished from other types 
> of
> fields.
> f. PKs and FKs are grouped at the top of the field list in design view.
> This is done so that the PK and all FKs can be seen at a glance without
> having to search through the fields looking for PKs/FKs.
>
>
> Thus field names look like:
> tblVehicle:
> VE_ID
> VE_Color
> VE_Make
>
> tblPeople
> PE_ID
> PE_LName
> PE_FName
> PE_SSN
>
> tblPeopleVehicle
> PV_ID
> PV_IDPE
> PV_IDVE
> PV_DateAssigned
>
> As you can see, by using the _ character it is easy to distinguish the
> prefix from the rest of the name.  By using the ID immediately after the
> underscore it is easy to find every PK/FK field.  By grouping all the
> PKs/FKs at the top of the table, no searching is required to find the
> PKs/FKs.  By using the _IDXXXX construct, it is easy to visually look at 
> the
> FK and just "see" what table that is the PK in.
>
> As I said above, to me reasons are the important thing.  They define why I
> do what I do and allow me to evaluate whether making a change to what I do
> is useful to me.  Rules without the associated reason are useless since I
> cannot evaluate how it applies to what I am trying to do.
>
> Rules are made to be broken, but I want to know the danger of doing so.
>
> John W. Colby
> www.ColbyConsulting.com
>
>
> -- 
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com 




More information about the AccessD mailing list