Hola!
Primero que nada, en tu tabla de votos debe existir un identificador para quién haya votado. En el modelo relacional, un voto puede tener un sólo dueño para una determinada categoría (o, en tu caso, noticia), por lo que la taba votos debería tener dos cosas (aparte de la información del voto):
- Un registro de la categoría del voto y
- Un registro del votante.
Un modelo válido podría ser este:
Sin tablas como estas no tendrás cómo saber quién votó por qué cosa (noticia).
Primero que nada, en tu tabla de votos debe existir un identificador para quién haya votado. En el modelo relacional, un voto puede tener un sólo dueño para una determinada categoría (o, en tu caso, noticia), por lo que la taba votos debería tener dos cosas (aparte de la información del voto):
- Un registro de la categoría del voto y
- Un registro del votante.
Un modelo válido podría ser este:
CREATE TABLE usuario (
id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(50) NOT NULL,
apellido VARCHAR(50) NOT NULL,
password BINARY(128) NOT NULL,
cuenta_activa BIT(1) NOT NULL DEFAULT '0'
);
CREATE TABLE noticia (
id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
titulo VARCHAR(100) NOT NULL,
contenido TEXT NOT NULL,
creador_id BIGINT NOT NULL,
CONSTRAINT noticia_usuario_fk FOREIGN KEY (creador_id) REFERENCES usuario (id),
CONSTRAINT noticia_titulo_un UNIQUE (titulo)
);
CREATE TABLE voto (
id BIGINT NOT NULL PRIMARY KEY,
valoracion INT DEFAULT '0',
noticia_id BIGINT NOT NULL,
votante_id BIGINT NOT NULL,
CONSTRAINT voto_noticia_fk FOREIGN KEY (noticia_id) REFERENCES noticia (id),
CONSTRAINT voto_votante_fk FOREIGN KEY (votante_id) REFERENCES usuario (id)
);Sin tablas como estas no tendrás cómo saber quién votó por qué cosa (noticia).