bloque2:diseno
Diferencias
Muestra las diferencias entre dos versiones de la página.
bloque2:diseno [2021/11/26 00:21] – [Primera forma normal 1FN] fernando | bloque2:diseno [2024/09/16 19:34] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 48: | Línea 48: | ||
{{ relacion.png }} | {{ relacion.png }} | ||
| | ||
- | Si consideramos que dos entidades A y B están relacionadas a través de una relación R, deberemos determinar lo que se conoce como //cardinalidad | + | Si consideramos que dos entidades A y B están relacionadas a través de una relación R, deberemos determinar lo que se conoce como //cardinalidades |
==== Relaciones binarias y ternarias ==== | ==== Relaciones binarias y ternarias ==== | ||
- | Para evitar las dificultades que supone el uso de algunos aspecto del [[bloque2: | + | Para evitar las dificultades que supone el la transformación a tablas (Modelo Relacional) |
{{ relaciones.png }} | {{ relaciones.png }} | ||
Línea 81: | Línea 81: | ||
==== Cardinalidad de la relación ==== | ==== Cardinalidad de la relación ==== | ||
- | Es una cardinalidad que nos hace ver rápidamente la participación de dos entidades en una relación. | + | |
+ | === Cardinalidades parciales de una relación === | ||
+ | Son las cardinalidades que nos indican con cuantos elementos de una entidad participan los elementos de la otra entidad, cómo mínimo y como máximo. Cada entidad tiene su cardinalidad parcial, y a partir de ambas se obtiene la cardinalidad completa de la relación. Se separan mediante '','' | ||
+ | |||
+ | === Cardinalidad total de una relación === | ||
+ | Es una cardinalidad que nos hace ver rápidamente la participación de dos entidades en una relación. | ||
{{ : | {{ : | ||
+ | Se indica en mayúsculas y separada por '':'' | ||
==== Atributos de una relación ==== | ==== Atributos de una relación ==== | ||
Existen situaciones en las que a la hora de modelar ciertos requisitos, nos encontramos con que hay ciertos datos que debe almacenar la base de datos que no son características **realmente propias** de ninguna de las entidades que conforman una relación. En esos caso es probable que dichas propiedades pertenezcan a la relación en sí. | Existen situaciones en las que a la hora de modelar ciertos requisitos, nos encontramos con que hay ciertos datos que debe almacenar la base de datos que no son características **realmente propias** de ninguna de las entidades que conforman una relación. En esos caso es probable que dichas propiedades pertenezcan a la relación en sí. | ||
Línea 106: | Línea 112: | ||
- | En el caso del ejemplo, existen dos tipos de empleados que se relacionan de forma diferente con otros objetos del sistema, pero que a su vez pueden tener gran parte en común. Por ejemplo, trabajan de forma diferente pero muchos de los datos personales que almacenaremos de ambos son comunes. Es por eso que el objeto // | + | En el caso del ejemplo, existen dos tipos de empleados que se relacionan de forma diferente con otros objetos del sistema, pero que a su vez pueden tener gran parte en común. Por ejemplo, trabajan de forma diferente pero muchos de los datos personales que almacenaremos de ambos son comunes. Es por eso que el objeto // |
==== Reflexividad ==== | ==== Reflexividad ==== | ||
Línea 223: | Línea 229: | ||
- | === Claves Secundarias === | + | === Claves |
Se suele llamar de este modo a todos los campos que identifican a cada registro de forma inequívoca, | Se suele llamar de este modo a todos los campos que identifican a cada registro de forma inequívoca, | ||
En las imágenes del ejemplo anterior, el campo (matricula) de la tabla Vehículo, es un campo único por lo que se considera una clave secundaria. También podríamos tener un campo (dni) para la tabla Propietario que actuaría como clave secundaria. | En las imágenes del ejemplo anterior, el campo (matricula) de la tabla Vehículo, es un campo único por lo que se considera una clave secundaria. También podríamos tener un campo (dni) para la tabla Propietario que actuaría como clave secundaria. | ||
- | ====Conversión | + | ====Transformación |
El paso de un modelo E/R a un modelo relacional se puede llevar a cabo, en gran parte, siguiendo una serie de reglas o pautas, que se enumeran a continuación: | El paso de un modelo E/R a un modelo relacional se puede llevar a cabo, en gran parte, siguiendo una serie de reglas o pautas, que se enumeran a continuación: | ||
Línea 233: | Línea 239: | ||
**Entidades y atributos: | **Entidades y atributos: | ||
- | * Toda entidad se transforma en una tabla. | + | * Toda **entidad** se transforma en una tabla. |
- | + | * Todo **atributo simple** o **derivado** se transforma en columna de una tabla. | |
- | * El identificador único de la entidad se convierte en clave primaria. Siempre que pueda, añadiré un campo //id// como clave primaria. | + | * Los **atributos estructurados** transforman los campos en los que se componen en nuevas columnas de la tabla. |
- | + | * El **identificador único** de la entidad se convierte en clave primaria. Siempre que pueda, añadiré un campo //id// como clave primaria. | |
- | * Todo atributo simple o calculado se transforma en columna de una tabla. | + | * Los **atributos multivaluados** generan una nueva tabla con tres columnas: un //id//, el //id// de la tabla de la que surgen propagado como //clave ajena// y el valor del campo multivaluado. |
- | + | ||
- | * Los atributos multivaluados generan una nueva tabla con tres columnas: un id, el id de la tabla de la que surgen propagado como clave ajena y el valor del campo multivaluado. | + | |
- | + | ||
- | * Los atributos estructurados transforman los campos en los que se componen en nuevas columnas de la tabla. | + | |
**Relaciones: | **Relaciones: | ||
Línea 271: | Línea 273: | ||
* En la transformación de **relaciones 1:1** se tienen en cuenta las cardinalidades de las entidades que participan en ellas. Existen también diferentes soluciones: | * En la transformación de **relaciones 1:1** se tienen en cuenta las cardinalidades de las entidades que participan en ellas. Existen también diferentes soluciones: | ||
- | - La transfomación tradicional consiste en que una de las tablas tenga una clave primaria que al mismo tiempo es clave ajena de la otra tabla. | + | - La transfomación tradicional consiste en que una de las tablas tenga una clave primaria que al mismo tiempo es clave ajena de la otra tabla. |
- | - Otra solución más sencilla es transformarla como si fuera una relación 1:N. Si existe una entidad con cardinalidad parcial (0,1), su tabla tendrá una columna nueva que sería la clave primaria de la otra entidad propagada como clave ajena. Si las cardinalidades parciales son iguales da igual hacia qué tabla se propague la clave primaria. //Si usamos esta opción, al crear las tablas en el SGBD, la clave ajena debe ser una columna indexada sin repeticiones ('' | + | - Otra solución más sencilla es transformarla como si fuera una relación 1:N. Si existe una entidad con cardinalidad parcial (0,1), su tabla tendrá una columna nueva que sería la clave primaria de la otra entidad propagada como clave ajena. Si las cardinalidades parciales son iguales da igual hacia qué tabla se propague la clave primaria. //Si usamos esta opción, al crear las tablas en el SGBD, la clave ajena debe ser una columna indexada sin repeticiones ('' |
- | - Transformarlo en una tabla. | + | - Transformarlo en una tabla. |
Ejemplo: Un empleado solo puede tener un despacho, y un despacho pertenece a un solo empleado. | Ejemplo: Un empleado solo puede tener un despacho, y un despacho pertenece a un solo empleado. | ||
{{ : | {{ : | ||
- | >Tablas empleados y despachos (opción | + | >Tablas empleados y despachos (Ejemplo |
+ | |||
+ | <code sql> | ||
+ | -- Ejemplo 1: Clave primaria y ajena al mismo tiempo | ||
- | < | ||
- | -- Opción 1 | ||
empleados(# | empleados(# | ||
despachos(# | despachos(# | ||
- | -- Opción | + | -- Ejemplo |
empleados(# | empleados(# | ||
despachos(# | despachos(# | ||
</ | </ | ||
- | * Para los **atributos | + | * Las relaciones |
- | | + | - Para relacionarlas, |
- | | + | - La otra forma, menos común, es transfomarla como si fueran dos relaciones **1:N**: las tablas hijas tienen su propia clave primaria |
- | * Las relaciones | + | |
- | + | ||
- | * Las relaciones de **herencia** se pueden transforman de varias maneras. Aplicando las reglas anteriores, se ha de crear una tabla por cada entidad hija con sus propias columnas. | + | |
- | - Para relacionarlas, | + | |
- | - La otra forma, menos común, es transfomarla como si fueran dos relaciones **1:N**: las tablas hijas tienen su propia clave primaria, y añadirán una columna nueva que es la clave primaria de la entidad padre, propagada como clave ajena. //En este caso, al crear las tablas hijas en el SGBD, las claves ajenas deben tener ser columnas indexadas sin repeticiones ('' | + | |
- | |||
Ejemplo: Una pista puede ser una pista_abierta o una pista_cerrada. | Ejemplo: Una pista puede ser una pista_abierta o una pista_cerrada. | ||
{{ : | {{ : | ||
+ | |||
>Tablas pistas, pistas_abiertas y pistas_cerradas | >Tablas pistas, pistas_abiertas y pistas_cerradas | ||
- | < | + | < |
+ | -- Ejemplo 1: Claves primarias y ajenas al mismo tiempo | ||
pistas(#id, nombre, tipo, superficie) | pistas(#id, nombre, tipo, superficie) | ||
pistas_abiertas(# | pistas_abiertas(# | ||
pistas_cerradas(# | pistas_cerradas(# | ||
- | </ | + | |
+ | -- Ejemplo 2: Claves primarias y ajenas diferentes (-id_pista es UNIQUE y NOT NULL) | ||
+ | |||
+ | pistas(#id, nombre, tipo, superficie) | ||
+ | pistas_abiertas(# | ||
+ | pistas_cerradas(# | ||
+ | </ | ||
* Las relaciones **reflexivas**, | * Las relaciones **reflexivas**, | ||
- | * Si la cardinalidad es **N:M**, se crea una tabla nueva como el caso general de relación N:M. La clave primaria se comprone del id de la tabla. | + | * Si la cardinalidad es **N:M**, se crea una tabla nueva como el caso general de relación N:M. La clave primaria se compone de dos columnas que referencian al mismo id de la propia |
* Si la cardinalidad es **1:N**, se transforma como si se tratara de una relación 1:N, se propaga la clave primaria a la misma tabla como clave ajena. | * Si la cardinalidad es **1:N**, se transforma como si se tratara de una relación 1:N, se propaga la clave primaria a la misma tabla como clave ajena. | ||
- | * Si la cardinalidad es **1:1**, al tratarse de la misma tabla, se transforma como si se tratara de una relación 1:N. //Si usamos esta forma al crear la tabla en el SGBD la columna clave ajena no permitirá valores repetidos (indexada sin repeticiones, | + | * Si la cardinalidad es **1:1**, al tratarse de la misma tabla, se transforma como si se tratara de una relación 1:N. //En este caso, al crear la tabla en el SGBD la columna clave ajena no permitirá valores repetidos (indexada sin repeticiones, |
{{ : | {{ : | ||
>Un empleado puede supervisar a varios empleados | >Un empleado puede supervisar a varios empleados | ||
- | < | + | < |
-- Relacion 1:N y 1:1 | -- Relacion 1:N y 1:1 | ||
empleados(# | empleados(# | ||
Línea 325: | Línea 332: | ||
empleados_supervisores(# | empleados_supervisores(# | ||
</ | </ | ||
+ | |||
+ | * Para los **atributos de las relaciones** existen dos casos: | ||
+ | * Si la relación es 1:N, sus atributos se propagan a la tabla de lado N, junto con la clave del lado 1 | ||
+ | * Si la relación es N:M, sus atributos se transforman en columnas de la tabla generada por dicha relación | ||
+ | * Las relaciones **1:1** no deberían de tener atributos, ya que en principio deben pertenecer a alguna de las dos entidades. | ||
==== Ejemplos de transformaciones a modelo relacional ==== | ==== Ejemplos de transformaciones a modelo relacional ==== | ||
bloque2/diseno.1637886089.txt.gz · Última modificación: 2024/09/16 19:34 (editor externo)