Mejores Prácticas con IDs en Base de Datos con Coldfusion
Al momento de diseñar tablas siempre hay una disyuntiva. Hacer un ID autonumérico secuencial o permitir que el ID sea creado manualmente. Aunque hay filosofía para crear identificadores robustos con UUID() considero que lo mejor es ID's numéricos simples y automáticos. Dejar que el motor de SQL haga todo el trabajo por nosotros.
¿Y a nivel de código como se recomienda? Y es que resulta "complicado" o "verboso" validar si ya existe el ID o si no crearlo, por ello hagamos el ejercicio suponiendo que hablamos de usuarios y que el verdadero identificador único es el correo electrónico.
La creación de la tabla seria algo simple como:
CREATE TABLE [dbo].[_users](
[uId] [int] IDENTITY(1,1) NOT NULL,
[firstName] [varchar](25) NULL,
[lastName] [varchar](25) NULL,
[email] [varchar](75) NOT NULL,
[phone] [varchar](15) NULL,
[dtUpdate] [datetime] DEFAULT (getdate()),
) ON [PRIMARY]
ALTER TABLE [dbo].[_users] ADD CONSTRAINT [PK__users] PRIMARY KEY CLUSTERED ([uId] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
CREATE UNIQUE NONCLUSTERED INDEX [Index__users_1] ON [dbo].[_users]
( [email] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Podrás observar que
- la Llave primaria es el ID (llamado uID en este ejemplo)
- el uID es autonumerico de tipo entero
(va de 1 a 2,147,483,647, en incrementos de 1) - Se crea un índice sobre el campo clave (email) para que sea único
- Observa como todos los campos excepto la llave e indice son "opcionales"
- Observa como la tabla se llama _users, con "_"
(para evitar conflictos por palabras reservadas) - Agregamos un campo de fecha para saber cuando se modificó la data.
Ahora, para crear las funciones de Insertar o Editar los método son simples -