Tip:
Highlight text to annotate it
X
Hola, este es un video del grupo de innovación tecnológico-educativa en bases de datos para
la asignatura Fundamentos de las bases de datos.
En este vídeo vamos a tratar un error bastante habitual al trabajar con nuestra base de datos
de práctica.
Si observamos el esquema entidad-relación de la base de datos Tienda On Line, vemos
la relación que se establece entre los USUARIOs y las LOCALIDADes.
En realidad son dos las relaciones, una directa que hemos llamado "vive_en" y otra indirecta
que tiene que ver con direcciones alternativas de envío. Nos vamos a centrar en la primera,
aunque para las direcciones de envío el problema es el mismo.
Lo más importante es que entre LOCALIDAD y PROVINCIA hay una dependencia de identificador,
esto es, las LOCALIDADES necesitan acompañar o completar su identificador con el de la
PROVINCIA a la que pertenecen.
Esto se traduce en que la tabla USUARIO tiene dos columnas, "pueblo" y "provincia" cuyo
papel es el de hacer de referencia a la localidad donde vive cada usuario.
Es decir, (pueblo, provincia) es clave ajena a LOCALIDAD.
Si observamos la tabla LOCALIDAD, la clave primaria está compuesta por (codm, provincia),
código de municipio y código de provincia, siendo "provincia" clave ajena a la tabla
PROVINCIA.
Una posible ocurrencia, un estado de la base de datos podría contener estos valores.
Vamos a detenernos en LOCALIDAD. Cada localidad se diferencia de de las demás por algún
valor de sus columnas "codm" o "provincia".
Fijémonos en que Abengibre y Allande tienen el mismo código de municipio, pero diferente
provincia. Dicho de otro modo, el pueblo (0019,02) es distinto del pueblo (0019,33).
Escribimos una consulta de esta forma, filtrando el valor de "nombre" e igualando la columna
"pueblo" de USUARIO con la "codm" de LOCALIDAD, con la esperanza de obtener el nombre del
pueblo de todos aquellos que se llamen Javier.
La ejecución de la consulta la podríamos pensar así: se van a concatenar las filas
de USUARIO y LOCALIDAD.
De los USUARIOS solo utilizamos las filas que tienen en "nombre" el valor "JAVIER".
Y se buscan todas aquellas LOCALIDADES cuyo código de municipio coincide con el de las
filas de USUARIO.
Se realizan todas las combinaciones necesarias y filtramos las columnas para quedarnos solo
con el nombre del pueblo.
El resultado es que Javier Martínez Fernández vive en... ¡2 pueblos al mismo tiempo!
O eso, o el pueblo de Javier tiene dos nombres. En cualquier caso, ¿adónde le enviamos lo
que compre, a Alatoz o a Aller?
Rebajamos un poco nuestra arrogancia y asumimos que nos hemos equivocado en alguna parte.
El problema es que no hemos tenido en cuenta que cada pueblo no solo se identifica por
su código de municipio sino también por la provincia a la que pertenece.
Ahora sí, la concatenación se produce cuando esa pareja de valores se encuentra, idéntica,
en la tabla LOCALIDAD. Y como es un valor de clave primaria, solo un pueblo vamos a
encontrar.
Simplemente hay que interpretar correctamente el esquema de la base de datos: LOCALIDAD
se identifica por (codm,provincia) por lo que cualquier referencia, el pueblo donde
vive cada usuario, debe estar formado por los dos datos: Javier vive en la localidad
(0024,33).
Este video es un recurso de la asignatura Fundamentos de las Bases de Datos para los
grados en Ingeniería Informática e Ingeniería Multimedia.
Somos el grupo de innovación tecnológico-educativa BDgite, del Dpto. de Lenguajes y Sistemas
Informáticos de la Universidad de Alicante.
Encontrarás más información en la página FBDdocs.dlsi.ua.es.
Muchas gracias por ver este video.