
¿Repetir Claves Foráneas?
Publicado por Lara (5 intervenciones) el 24/03/2017 04:04:41
¡Buenas! Tengo un problemilla con una pequeña base de datos que nos pidieron en clase.
Se trata de la base de datos de una biblioteca y entre los datos de cada libro, hay que incluir las categorías. Las categorías tienen su propia tabla, hasta ahí todo correcto, el problema ocurre cuando un libro tiene varias categorías a la vez, por ejemplo, una novela que es de categoría autobiográfica e histórica.
He creado las tablas y las claves foráneas correspondientes pero me surge un dilema ¿cóm hacer que si un libro pertenece a dos o tres categrorías figuren sin necesidad de duplicar o triplicar la tabla de cateogrías?
¡Ante todo gracias por vuestra ayuda!
A continuación os adjunto el código de las tablas por si sirve de algo (si veis más errores por favor no dudéis en decírmelo, lo que quiero es aprender). Y de nuevo ¡gracias!
Se trata de la base de datos de una biblioteca y entre los datos de cada libro, hay que incluir las categorías. Las categorías tienen su propia tabla, hasta ahí todo correcto, el problema ocurre cuando un libro tiene varias categorías a la vez, por ejemplo, una novela que es de categoría autobiográfica e histórica.
He creado las tablas y las claves foráneas correspondientes pero me surge un dilema ¿cóm hacer que si un libro pertenece a dos o tres categrorías figuren sin necesidad de duplicar o triplicar la tabla de cateogrías?
¡Ante todo gracias por vuestra ayuda!
A continuación os adjunto el código de las tablas por si sirve de algo (si veis más errores por favor no dudéis en decírmelo, lo que quiero es aprender). Y de nuevo ¡gracias!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/* Creando tabla de categorías */
CREATE TABLE categoria (
codCategoria INT(5) AUTO_INCREMENT,
nombre VARCHAR(20) NOT NULL,
PRIMARY KEY (codCategoria)
);
/* Creando tabla de autores */
CREATE TABLE autor (
codAutor INT(5) AUTO_INCREMENT,
nombre VARCHAR(40) NOT NULL,
apellidos VARCHAR(100),
nacimiento DATE,
muerte DATE,
PRIMARY KEY (codAutor)
);
/* Creando tabla de colecciones */
CREATE TABLE coleccion (
codColeccion INT(5) AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
numLibros INT(5),
completa BOOLEAN,
PRIMARY KEY (codColeccion)
);
CREATE TABLE editorial (
codEditorial INT(5) AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
fechaPrimeraEd DATE,
PRIMARY KEY (codEditorial)
);
/* Creando tabla de libros */
CREATE TABLE libro (
codLibro INT(5) AUTO_INCREMENT,
titulo VARCHAR(100) NOT NULL,
idioma VARCHAR(20),
codAutor INT(5),
codColeccion INT(5),
codCategoria INT(5),
codEditorial INT(5),
PRIMARY KEY (codLibro),
CONSTRAINT libros_autor
FOREIGN KEY (codAutor) REFERENCES autor (codAutor)
ON DELETE CASCADE,
CONSTRAINT libros_coleccion
FOREIGN KEY (codColeccion) REFERENCES coleccion (codColeccion)
ON DELETE CASCADE,
CONSTRAINT libros_categoria
FOREIGN KEY (codCategoria) REFERENCES categoria (codCategoria)
ON DELETE CASCADE,
CONSTRAINT libros_editorial
FOREIGN KEY (codEditorial) REFERENCES editorial (codEditorial)
ON DELETE CASCADE
);
Valora esta pregunta


0