Quiero realizar una web para un concurso de fotografía donde se requiere que los usuarios puedan subir hasta un máximo de 3 imágenes. Los usuarios pueden participar en 3 categorías diferentes. La categoría General, categoría para alumnos y categoría para los padres de los alumnos. De manera que en la general puede participar cualquiera, pero si alguien participa en la categoría de alumnos y en la categoría de padres de alumnos participa directamente en la categoría general.
En un principio cree un sistema para organizar las imágenes por carpetas, de manera que se creaba una carpeta por categoría (general, alumnos, padres) y dentro de cada una de estas carpetas otra carpeta cuyo nombre iba a ser apellidos_nombre
y que almacenaría las imágenes de cada usuario. El problema de este sistema es que al poder participar cada usuario en mas de una categoría me obligaría a tener una duplicidad en las imágenes que no quiero tener. Por ello al final me he decidido a crear una base de datos que almacenaría los datos de los usuarios, las url de las imágenes que suben, y las categorías en las que participan. Como no estoy muy puesto en bases de datos me gustaría preguntaros si está bien lo que he diseñado hasta ahora. Esta son las tablas de la base de datos:
CREATE TABLE usuarios(
user_id integer not null UNIQUE AUTO_INCREMENT ,
nombre varchar(20) not null,
apellidos varchar(50) not null,
email varchar(100) not null UNIQUE,
telefono int
);
CREATE TABLE imagenes(
image_id integer not null UNIQUE AUTO_INCREMENT,
PRIMARY KEY(image_id),
mime_type varchar(20) not null,
url varchar(100) not null UNIQUE,
nombre varchar(100) not null,
localizacion varchar(100) not null,
user_id int not null
FOREIGN KEY(user_id)
REFERENCES usuarios(user_id)
ON DELETE CASCADE,
categoria varchar(20) not null REFERENCES categorias(nombre)
);
CREATE TABLE categorias(
categoria_id integer not null UNIQUE AUTO_INCREMENT,
PRIMARY KEY(categoria_id),
nombre varchar(20) not null
);
CREATE TABLE usuario_categoria{
user_id integer not null,
FOREIGN KEY(user_id)
REFERENCES usuarios(user_id)
ON DELETE CASCADE,
categoria_id not null,
FOREIGN KEY(categoria_id)
REFERENCES categorias(usuario_categoria)
};
CREATE TABLE imagenes_categoria{
image_id integer not null,
FOREIGN KEY(image_id)
REFERENCES imagenes(image_id)
ON DELETE CASCADE,
categoria_id integer not null,
FOREIGN KEY(categoria_id)
REFERENCES categorias(categoria_id)
}
La tabla usuarios
almacena los datos de los participantes, la tabla imágenes
almacena la dirección donde está almacenada y categorías
almacena las diferentes categorías.. Y el resto son tablas intermedias. usuario_categoria
muestra que usuarios participan en que categoría. Y por ultimo imágenes_categoria
nos indica que imágenes pertenecen a cada categoría.
Me gustaría saber vuestra opinión, críticas, posibles soluciones mejores y mas eficientes. Lo que sea. Un saludo