Es siempre mejor usar como clave de tabla un "Id" o no? En Access

Muy muy básica.

Cuando creo una tabla generalmente se pone como clave referencial: un Id autonumerico o un campo.

Ejemplo tabla planes:

ID - Nombre - Descripción

Tabla Pedidos:

ID - Plan (lo toma de la tabla de arriba) - Monto

El inconveniente es que al relacionar me queda guardado dentro la tabla "Pedidos", en el campo [Plan] los ID de planes.

Lo cual cada vez que quiero usar codigo vba o hacer criterios en consultas debo saber poner como criterio el numero de Id. Por ejemplo en un condicional if.

If Plan = 1 then X

Elseif Plan = 2 then X2

Else X3

End if
Se hace incomodo no poder poner poner en nombre de plan y cuando lees el código tener que acordarse ese ID a que plan hace referencia. Me gustaría que sea asi:

If Plan = "Ninguno" then X

Elseif Plan = "Financiado" then X2

Else X3

End if

Espero que se entienda el punto. Me queda la tabla pedidos que tiene 200 registros con todos id guardados en cada campo que toma datos relacionados de otras tablas, en vez de tener el nombre del dato en si mismo. Esto hace difícil crear código y consultas claras para leer.
¿Hay algo que estoy haciendo mal? ¿Es recomendable en vez de que la clave sea el ID, borrarlo y poner como clave el "Nombre"?

1 Respuesta

Respuesta
1

Sobre este tema hay diferencia de opiniones, y también depende del programador de la BD. Las ventajas de un ID autonumérico (no necesariamente tiene por qué llamarse siempre ID) es que identifica inequícovamente al registro (nunca se va a repetir el ID), ocupa menos espacio en memoria (un campo numérico "pesa" menos que uno de texto) y es más sencillo a la hora de escribir código (no tienes que estar pendiente de comillas, almohadillas...)

No sé cómo diseñas tus tablas, pero si en tu tabla Pedidos configuras el campo Plan como un cuadro combinado (ya sea usando el asistente al crearlo o bien manualmente en la pestaña Búsqueda del diseño de la tabla), verás que aunque se te almacena el Id, el valor que muestra la tabla es el Nombre.

Otra forma de trabajar es crear una consulta con ambas tablas, y en vez del campo Plan de la tabla pedidos, coges Nombre de la tabla Planes-

Por último, a la hora de escribir código en VBA, siempre puedes "transformar" el ID a texto, con la función DLookUp, por ejemplo:

Dim nomPlan As String

nomPlan=DLookUp("Nombre","Planes","ID=" & Me.Plan)

If nomPlan = "Ninguno" then X

Elseif nomPlan = "Financiado" then X2

Else X3

End if

De este modo, conservas las ventajas de tener un autonumérico, pero trabajas con valores texto asociados al ID.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas