Consideraciones previas antes de diseñar una base de datos.
Leí una definición de base de
datos que me gusta y viene a decir más o menos que
Una base es un reflejo de una
parte de una realidad que queremos administrar
1.
Relatividad de las bases.
La definición anterior es algo que no debemos olvidar
nunca por varios motivos:
Al ser un reflejo depende del
color del cristal con que lo miremos.
Al ser de una parte, aunque
estemos hablando de lo mismo, de un taller, cada uno podemos tomar una parte,
yo querré controlar el almacén y tu no, etc.
Como es lo que queremos
administrar, cada uno podemos administrar lo mismo de formas distintas, por
ejemplo tu administras el almacén y yo no, tu solo cobras al contado y yo cobro
al contado y crédito, etc.
Con lo anterior quiero hacer ver
que cada uno podemos tener necesidades distintas y por tanto la solución que
uno adopte puede ser válida para el pero no para otro.
Imaginemos que estamos hablando de
reparaciones o trabajos que realizamos a vehículos, en ese caso tu puedes
indicar que la clave principal del vehículo es la matricula, pero en mi caso
puede que todos los coches estén sin matricular y por tanto tu propuesta no me
sirve.
Con esto no quiero desanimarte,
solo quiero indicar que a la hora de consultar/plantear algo, hay que dar todos
los detalles posibles, y aun así de las respuestas que nos den, lo que tenemos que
hacer es entenderlas e intentar adaptarlas a nuestra realidad.
1. Que
debemos hacer y que no hacer
en una base
Otro tema es el de las cosas que
se deben y no se deben hacer en una base, esta claro que hay cosas en las que
todos estamos mas o menos de acuerdo, no se debe guardar un campo calculado, no
se debe repetir un dato, etc. pero teniendo claro lo que hacemos y porque, y
sobre todo sus ventajas e inconvenientes podemos hacer lo que nos plazca y
tampoco hay que ser estrictos 100%.
A la pregunta de donde guardar un precio para no
duplicarlo, mi opinión es que si tenemos una tabla de productos en los que
tenemos los precios, a la hora de hacer una factura es conveniente/necesario no
solo guardar el Producto, si no que también tenemos que guardar el precio
aunque parezca que estamos repitiendo un dato y que lo podemos coger de la
tabla productos.
En mi opinión hay que guardar el
precio en la tabla facturas (mejor en la tabla DetallesFacturas)
por varios motivos, uno que aun cliente concreto podemos querer cobrarle otro
precio, y otro motivo es que cuando cambiemos los precios en la tabla
productos, si no tenemos guardado el precio en la factura todas las facturas
tomaran el precio actual cosa que no es cierto para las facturas antiguas.
Podemos considerar que el precio
en la tabla productos es PrecioActual y que el precio
en la factura es PrecioCobrado, de esta forma no
tenemos datos repetidos porque son conceptos distintos.
2. Tiempo de validez de una base, eliminar datos, versatilidad de
los datos.
Otro punto que considero importante a la hora de diseñar
una base de datos es el periodo de tiempo en el que queremos que nuestra base
sea válida.
Si hacemos una base de datos en la que tengamos vehículos
y propietarios de alguna forma tendremos que relacionar vehículos y personas.
Si consideramos que un vehículo solo puede tener un
propietario al mismo tiempo y montamos nuestra base con ese criterio, la base
solo tendrá validez para un momento puntual.
Si queremos guardar un histórico de los distintos propietarios
de un vehículo tendremos que poder relacionar un vehículo con mas de una
persona y por tanto tenemos que montar nuestra base para que eso sea posible.
Si continuamos con el ejemplo de vehículos y propietarios,
es posible pensar que cuando un vehículo se dé de baja lo borramos de nuestra
base de datos y listo.
En general mi criterio es NO borrar datos de nuestra base,
si hemos creado un vehículo y al final no hemos gestionado nada de ese vehículo
o lo hemos creado por error si podríamos modificar sus datos o eliminarlo,
ahora bien, si hemos gestionado algo del vehículo mi criterio es no borrarlo
aunque el vehículo se haya dado de baja y ya no lo vayamos a gestionar mas.
Motivos hay varios, uno que si lo borramos perderemos el
histórico y eso es una parte importante de nuestra base.
En lugar de eliminar algo que no vamos a gestionar yo
prefiero marcarlo como no válido, dado de baja, obsoleto o como queramos
llamarle.
Una vez que hemos decidido no borrar podemos pensar en
agregar un campo en el cual indicar si el elemento en cuestión es vigente o no,
ahora bien, aquí viene lo de la versatilidad de los datos guardados.
Hay que intentar hacer lo máximo posible con los menos
datos que podamos, continuando con el supuesto anterior, en lugar de poner ese
campo donde indicar si algo esta dado de baja o no, yo pondría un campo donde
guardar la fecha en que algo se da de baja.
Si hacemos esto, podemos saber fácilmente que elementos
son vigentes o no en funciona que tengan fecha de baja o no, y además tendremos
oto dato que nos puede servir y que es la fecha en que algo se ha dado de baja.
3.
Por ultimo están los ‘Yaques’:
Ya que tenemos este informe porque
no hacemos otro que nos muestre…..,
Ya que estamos porque no dejamos
que el usuario seleccione……
A ser posible hay que anticiparse
a lo que nos puedan pedir en un futuro para la base y a ser posible dejarla
preparada para ello, por ejemplo para llevar el almacén aunque ahora no lo
hagan, para permitir varias modalidades de pago aunque ahora solo usemos, una,
etc.