Hemos dicho que las bases de datos relacionales se basan en una estructura de datos que llamamos “tabla”.
Y es que ese aspecto tiene, una tabla con columnas que describe qué cosas vamos a almacenar en ella y filas donde se guardan los datos que nos interesan. Si la tabla no tiene filas, está vacía; si las tiene serán más o menos, depende del momento en el que la examinemos, hoy tengo 10 clientes, mañana puedo tener 1000, este ha cambiado de teléfono, este se ha dado de baja… Los datos viven, evolucionan. La forma de la tabla no tanto. Si definimos una tabla cliente las columnas DNI, nombre, apellidos, dirección postal, probablemente mañana sigan siendo las mismas. Muy de cuando en cuando añadimos otra columna, modificamos una, o hasta la eliminamos.
No obstante, hay ciertas reglas a seguir. Todas las columnas se definen en base a un “tipo de datos”. De estos hay muchos, demasiados se podría decir. Es una cuestión, digamos, técnica. En lenguajes informáticos es más fácil establecer claramente con qué estamos trabajando, si número, si texto, fechas u horas, o los dos… Tiene que ver con cómo se almacena eso en forma de bits y bytes en un disco duro, pero también en cómo se comparan valores.
En principio no se puede comparar texto y número. Es el viejo dicho de “manzanas con manzanas”. Ordenar unos y otros tampoco es lo mismo. Ordenar de mayor a menor 2 y 10 como número está claro, pero es el orden inverso a tratarlos como texto, como '2' y '10'.
Como estamos en un entorno informático, no es tan simple como "número" o "texto". Los números pueden ser enteros, normales, cortos o largos, reales, con decimales de mayor o menor precisión, coma flotante, ... hay unos cuantos tipos. Depende de cada producto concreto —MaríaDB, MySQL, Oracle…— Encima, en inglés.
Para no liarnos nos quedamos con unos pocos: entero, decimal...
integer
decimal (dígitos, decimales)
El texto puede tener longitud fija o variable, esto es, se rellena el sobrante con espacios o se ajusta al largo del texto a guardar. Además hay que especificar esa longitud. Lo mismo, empecemos por lo más básico: carácter, carácter variable...
char(longitud)
varchar(longitud)
También es muy común el tiempo, las fechas: fecha, fecha y tiempo...
date
datetime
Al final, definir una tabla resulta en algo como esto:
Tabla CLIENTE (
DNI char(12),
nombre varchar(40) not null,
apellidos varchar(80) not null,
direccion varchar (160),
poblacion varchar (60),
provincia varchar (40),
nacimiento date,
tipo integer)
Nuestra tabla tiene 8 columnas, cada una con su tipo de datos, y cuando tenga filas nos mostrará algo como esto:
¡Ah! Además hay un valor especial que se llama NULO (null) pero de eso ya hablaremos.
A continuación vienen las restricciones de la tabla. Las hay de varios tipos y sirven para obligar a manejar los datos siguiendo unas reglas que nosotros queremos que se cumplan. Afecta a la inserción y borrado de filas y a la modificación de datos concretos. Una sería que la columna "tipo" solo admitiera los valores 1, 2 y 3, por ejemplo. Otra muy importante es que puedo elegir un identificador de fila, algo que obligue a que no haya dos filas iguales. Piénsalo, ¿de qué te sirve tener al mismo cliente almacenado dos veces, en dos filas diferentes? La clave primaria —o principal, según quieras traducir primary— es una columna o grupo de columnas que hace de “identificador” y cuya naturaleza consiste en que siempre tiene valor y no permite duplicados.
Esto en la inmensa mayoría de las tablas porque los gestores de base de datos te permiten definir tablas sin clave primaria. Simplemente, a veces se necesitan los duplicados. En cualquier caso, aquí ya estamos hablando de cosas que, para lo que estamos haciendo, no te interesan.