Bases de datos: Especialización, Modelos SQL-DDL
En ocasiones surgen en nuestros modelos Entidad- Relación, una entidad que a su vez posee especialización. Por ejemplo, tenemos una entidad llamada «Jugadores», los cuales pueden tener una «especialidad», por ejemplo, «porteros», «delanteros», etc. Con unas características peculiares aparte de las propiedades comunes a los jugadores.
Es lo que llamamos una especialización. Veamos un ejemplo completo para MySQl:
DROP DATABASE IF EXISTS especial;
CREATE DATABASE especial;
USE especial;
DROP TABLE IF EXISTS `basico`;
CREATE TABLE basico(
id_u INT(6) NOT NULL default ‘0’,
nombre VARCHAR(20) default NULL,
PRIMARY KEY (id_u)
)TYPE = MyISAM CHARSET=utf8;
DROP TABLE IF EXISTS `especializacionA`;
CREATE TABLE especializacionA(
id_usuarioA INT(6) NOT NULL default ‘0’,
idA INT(9) NOT NULL default ‘0’,
infoA VARCHAR(20) default NULL,
PRIMARY KEY (id_usuarioA,idA)
)TYPE = MyISAM CHARSET=utf8;
DROP TABLE IF EXISTS `especializacionB`;
CREATE TABLE especializacionB(
id_usuarioB INT(6) NOT NULL default ‘0’,
idB INT(9) NOT NULL default ‘0’,
infoB VARCHAR(20) default NULL,
colorB VARCHAR(20) default NULL,
PRIMARY KEY (id_usuarioB,idB)
)TYPE = MyISAM CHARSET=utf8;
#– Referència A –> basico
ALTER TABLE especializacionA ADD CONSTRAINT espA_FK1
FOREIGN KEY (id_usuarioA)
REFERENCES basico (id_u) ;
#– Referència B –> basico
ALTER TABLE especializacionB ADD CONSTRAINT espB_FK1
FOREIGN KEY (id_usuarioB)
REFERENCES basico (id_u) ;
INSERT INTO basico VALUES(‘1’, ‘Eric’);
INSERT INTO basico VALUES(‘2’, ‘Ana’);
INSERT INTO basico VALUES(‘3’, ‘Pepe’);
INSERT INTO basico VALUES(‘4’, ‘Juan’);
INSERT INTO basico VALUES(‘5′,’Luis’);
INSERT INTO especializacionA VALUES(‘1′,’1′,’Cita 1 tipo A’);
INSERT INTO especializacionA VALUES(‘1′,’2′,’Cita 2 tipo A’);
INSERT INTO especializacionA VALUES(‘2′,’1′,’user 2 tipo A’);
INSERT INTO especializacionA VALUES(‘3′,’1′,’user 3 tipo A’);
INSERT INTO especializacionB VALUES(‘5′,’1′,’Cita 1 tipo B’,’Rojo’);
INSERT INTO especializacionB VALUES(‘4′,’1′,’Cita 1 tipo B’,’Amarillo’);
INSERT INTO especializacionB VALUES(‘4′,’2′,’Cita 2 tipo B’,’Blanco’);
mysql> select * from basico ba, especializacionA a, especializacionB b where (ba.id_u=a.id_usuarioA or ba.id_u=b.id_usuarioB) and ba.nombre=’Ana’;
+——+——–+————-+—–+—————+————-+—–+—————+———-+
| id_u | nombre | id_usuarioA | idA | infoA | id_usuarioB | idB | infoB | colorB |
+——+——–+————-+—–+—————+————-+—–+—————+———-+
| 2 | Ana | 2 | 1 | user 2 tipo A | 5 | 1 | Cita 1 tipo B | Rojo |
| 2 | Ana | 2 | 1 | user 2 tipo A | 4 | 1 | Cita 1 tipo B | Amarillo |
| 2 | Ana | 2 | 1 | user 2 tipo A | 4 | 2 | Cita 2 tipo B | Blanco |
+——+——–+————-+—–+—————+————-+—–+—————+———-+
3 rows in set (0.00 sec)