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)

Publicaciones Similares