En Firebird toda la estructura de cada Base de Datos se guarda en tablas internas cuyo nombre genérico es “metadatos”.

Los nombres de esas tablas y de todas sus columnas empiezan siempre con las letras MON$ o RDB$

En general no deberías cambiar los metadatos, ya que el menor error que cometas podría dejar a tu Base de Datos corrupta e inservible. Así que el riesgo que corres es muy grande.

Sin embargo, una vez que ya eres un desarrollador experimentado y entiendes bien lo que haces y estás seguro de no equivocarte entonces sí podrías modificar a los metadatos.

El manejo de una tabla MON$ o RDB$ es igual al manejo de cualquier otra tabla de Firebird, no hay diferencias. Puedes insertar, actualizar, borrar, consultar, de la misma manera a como lo harías con una tabla normal.

Aunque claro que los riesgos son muy distintos. Si te equivocas con una tabla normal solamente podrías tener datos erróneos aunque tu Base de Datos continuará funcionando sin problemas. En cambio si te equivocas al modificar los metadatos podrías terminar con una Base de Datos totalmente inservible.

Ejemplo

En nuestra Base de Datos tenemos una tabla llamada CLIENTES a la cual le queremos agregar comentarios en la descripción de las columnas.

METADATOS1

Captura 1. Si haces clic en la imagen la verás más grande

Como puedes ver, en la columna “Description” solamente algunas columnas de la tabla CLIENTES tienen su correspondiente descripción, la mayoría de las columnas no tienen descripción. ¿Y cómo haríamos para agregarles descripciones a las columnas que no tienen? Lo mejor y más correcto es hacerlo con un programa tal como el EMS SQL Manager, pero cuando eso no es posible también puedes hacerlo modificando los “metadatos” manualmente aunque por supuesto eso no es lo recomendable, por los motivos que ya hemos visto en los párrafos anteriores.

Si queremos hacerlo de la forma no recomendable a continuación veremos como. Las estructuras de todas las tablas de la Base de Datos se guardan en una tabla interna (o sea: un metadato) llamada RDB$RELATION_FIELDS. Entonces, lo que hacemos es actualizar la tabla y la columna que nos interesan.

UPDATE
   RDB$RELATION_FIELDS
SET
   RDB$DESCRIPTION = 'Aquí va la descripción de la columna de sucursales'
WHERE
   RDB$RELATION_NAME = 'CLIENTES' AND
   RDB$FIELD_NAME = 'CLI_CODSUC'

Lo que hicimos fue cambiar el contenido de la columna RDB$DESCRIPTION de la tabla RDB$RELATION_FIELDS. La tabla que cambiamos fue CLIENTES y la columna que cambiamos fue CLI_CODSUC.

METADATOS2

Captura 2. Si haces clic en la imagen la verás más grande

Como puedes ver en la Captura 2 se ha cambiado la descripción de la columna CLI_CODSUC tal y como lo habíamos querido.

Conclusión

Hacer un SELECT a los metadatos no te causara problemas, puedes escribir todos los SELECTs que quieras. Pero hacer un INSERT, un UPDATE o un DELETE ya es otra historia, allí sí podrías “meter la pata” y meterla muy grande, dejando a tu Base de Datos inservible. Por lo tanto, el sentido común te dice que no toques los metadatos salvo en el caso de que sepas muy bien lo que estás haciendo.

Este ejemplo mostró como cambiar un metadato. Como ves, es muy simple, muy sencillo, es lo mismo que harías con una tabla normal, no hay diferencias en eso. La diferencia sería en las consecuencias si haces algo mal.

Artículo relacionado:

El índice del blog Firebird21

Anuncios