Las tablas de búsqueda (o tablas de códigos , como algunas personas las llaman) suelen ser una colección de los posibles valores que se pueden dar para una determinada columna.
Por ejemplo, supongamos que tenemos una tabla de búsqueda llamada party
(destinada a almacenar información sobre partidos políticos) que tiene dos columnas:
party_code_idn
, que contiene valores numéricos generados por el sistema y (sin significado del dominio comercial ) funciona como un sustituto de la clave real.party_code
, es la clave real o "natural" de la tabla porque mantiene valores que tienen connotaciones de dominio empresarial .
Y digamos que dicha tabla retiene los siguientes datos:
+----------------+------------+
| party_code_idn | party_code |
+----------------+------------+
| 1 | Republican |
| 2 | Democratic |
+----------------+------------+
La party_code
columna, que mantiene los valores 'Republicano' y 'Democrático', siendo la clave real de la tabla, está configurada con una restricción ÚNICA, pero opcionalmente agregué el party_code_idn
y lo definí como el PK de la tabla (aunque, lógicamente hablando , party_code
puede funcionar como la CLAVE PRIMARIA [PK]).
Pregunta
¿Cuáles son las mejores prácticas para señalar valores de búsqueda de tablas de transacciones ? ¿Debo establecer referencias de CLAVE EXTRANJERA (FK) ya sea (a) directamente al valor natural y significativo o (b) a los valores sustitutos?
Opción (a) , por ejemplo,
+---------------+------------+---------+
| candidate_idn | party_code | city |
+---------------+------------+---------+
| 1 | Democratic | Alaska |
| 2 | Republican | Memphis |
+---------------+------------+---------+
tiene las siguientes propiedades 1 :
- Legible para el usuario final (+)
- Fácil de importar-exportar a través de sistemas (+)
- Difícil de cambiar el valor ya que necesita modificación en todas las tablas de referencia (-)
- Agregar nuevo valor no es costoso (=)
Creo que es casi como " pasar por valor ", para dibujar una analogía de la llamada a la función en la jerga de programación de aplicaciones.
Opción (b) , por ejemplo,
+---------------+----------------+---------+
| candidate_idn | party_code_idn | city |
+---------------+----------------+---------+
| 1 | 1 | Alaska |
| 2 | 2 | Memphis |
+---------------+----------------+---------+
tiene las siguientes propiedades:
- No legible para el usuario final (-)
- Difícil de importar-exportar ya que necesitamos desreferenciarlo (-)
- Valores fáciles de cambiar, ya que solo almacenamos referencias en tablas de transacciones (+)
- Agregar nuevo valor no es costoso (=)
Es muy similar a " pasar por referencia ", si se compara con la llamada de función en el lenguaje de programación de aplicaciones.
Importar-Exportar también se puede hacer de una manera diferente, es decir, simplemente rellenando la tabla de búsqueda nuevamente y luego volviendo a sembrar la columna sustituta. Espero estar entendiendo bien, esto es algo que acabo de escuchar como una posibilidad.
1. Tenga en cuenta que +
, -
y =
indicar el beneficio de esas propiedades.
Pregunta
Muy importante: ¿Hay alguna diferencia entre una tabla de búsqueda (o código ) y una referencia de FK si solo vamos a usar este último enfoque? Creo que funcionan igual.
FOREIGN KEY
en otra tabla, puede ser bastante desordenado, pero YMMV.UNIQUE CONSTRAINT
syNOT NULL
s, bueno, las entradas de su tabla de códigos estánFOREIGN KEY
en las tablas que las usan / se refieren a ellas, por lo que los conceptos están relacionados, pero no son lo mismo. La clave sustituta de la tabla de códigos es el campo que aparece en la tabla "secundaria", menos legible ciertamente, peroINT
no es muy grande, no se necesita mucho espacio, lo cual es una ventaja de las claves sustitutas.Hay un tercer enfoque que tiene algunas de las ventajas de sus dos opciones: poner un código real en la tabla de códigos. Con esto quiero decir una secuencia de caracteres corta que captura la esencia del valor total y es única. Para su ejemplo dado puede ser
El Código se lleva a las tablas transaccionales como una clave externa. Es breve, inteligible y algo independiente de los datos "reales". Los cambios incrementales al nombre no sugerirían un cambio de código. Sin embargo, si los republicanos se acampan en masa , puede ser necesario un cambio de código, con sus problemas concomitantes en los que no incurriría una identificación sustituta.
Este estilo se ha denominado codificación abreviada. Puedo recomendar la escritura de Celko sobre esto. Google books tiene varios ejemplos. Busque "codificación Celko".
Otros ejemplos: codificaciones de 2 o 3 letras para países, codificación de 3 letras (GBP, USD, EUR) para códigos de moneda. Corto, autoexplicativo y sin cambios (y hay un ISO para ellos).
fuente