3. Modelo Relacional - ZornStolz/MSI_Wiki GitHub Wiki

En el Modelo Relacional el usuario percibe cada base de datos como un conjunto de tablas

Elementos

Relación

Las relaciones contienen información de los objetos representados en la base de datos. Una relación es una tabla bidimensional cuyas filas corresponden a registros individuales y las columnas son los atributos.

Cada relación en una base de datos tiene un nombre único.

Cada celda contiene un valor atómico.

Los atributos tienen nombres únicos.

Los valores de los atributos pertenecen al mismo dominio.

No hay tuplas duplicadas.

El orden de las tuplas y el orden de los atributos no tienen significado.

  • Atributo: Pueden aparecer en cualquier orden en la relación. Cada columna contiene valores de un solo atributo.
  • Tupla: representa un objeto único de datos implícitamente estructurados en una tabla.

Relation

Dominio

Los dominios permiten al ingeniero definir en un solo lugar el significado y fuente de los valores que los atributos pueden tomar. Esto permite que se eviten los errores cuando se quieran hacer consultas u operaciones sobre la base de datos.

Ejemplo: Tomaremos como entidad la tabla Hotel que tiene como atributos hotelNo, hotelName, city

Domi

Grado

El grado de una relación es el número de conjunto de atributos que contiene

Grado

El grado de esta tabla es 3 por la cantidad de atributos

Cardinalidad

La cardinalidad de una relación es el número de tuplas que contiene.

Cardinalidad

La cardinalidad de esta tabla es 5 que son la cantidad de tuplas existentes.

Llaves primaria

Una llave primaria es un campo o grupo de campos que identifica en forma única un registro

Llave primaria

La llave primaria de la tabla Hotel es hotelNo

Llave Foranea

Tipos de relación (TablaA - TablaB)

  • Uno a Uno: En este tipo de relación cada llave foranea de la tabla es la llave primaria de la otra.

  • Uno a muchos: En este tipo la llave primaria de la TablaA pasa a ser la llave foranea de la TablaB.

  • Muchos a Muchos: Solo en este tipo de relación crea una nueva tabla donde su llave primaria esta compuesta por las llaves primarias de la TablaA y TablaB.

Hotel

Tabla Hotel.

Room

Tabla Room donde se puede evidenciar que depende de Hotel.

Llave Foranea

Clave foranea de Room es hotelNo.


Base de datos relacional

Una colección de relaciones normalizadas con diferentes nombres.

Reglas y restrincciones

Hasta ahora hemos visto como modelar todo nuestro diseño a una sintaxis entendible para cualquier otro diseñador, también hemos mencionado algunas peculiaridades, reglas, como estándar de nombrado. Aquí las veremos con más detalle otras reglas que hacen que el modelo sea mucho más completo.

  • La clave primaria tiene una regla de integralidad que nos dice que el valor de este atributo no puede ser null, es decir, no puede crearse un registro sin colocar su respectiva clave primaria. además, la clave primaria es única, no pueden existir por ningún motivo dos claves primarias iguales en una entidad.

  • La clave foránea tiene una regla de entidad referencial, esta nos dicta que la clave foránea debe coincidir con la clave primaria de otra entidad. Por ejemplo, en la relación que une autor y obra, obra tendrá un atributo que será una clave foránea, esta clave referencia a una clave primaria de autor.

  • Reglas Generales estas son reglas especiales que dependiendo del problema pueden ser agregadas al dominio del problema. Estas son agregadas para limitar o condicionar el funcionamiento de algunos atributos. Estas reglas son puestas por el propio usuario y no hacen parte de las reglas por obligatoriedad mencionadas anteriormente.

Ejemplos de esto serian: para una fecha el diseñador limite fechas hasta y desde un cierto periodo de tiempo; rangos de precios para el costo de algún servicio, etc.

Transformación de elementos de un modelo conceptual en relaciones y tablas.

Partiendo de un modelo conceptual (modelo Entidad - Relación), se puede obtener un esquema relacional siguiendo las siguientes reglas.

MR

Tomaremos como ejemplo el enunciado y modelo conceptual anterior para hacer la transformación.

Modelo conceptual del enunciado museo.

3. Entidad - Tabla

Cada entidad se representa como una tabla y sus atributos como columnas de esta.

Entidad

Entidad Museo y sus atributos en modelo conceptual

Museo Mr

Representación en modelo relacional

Museo (idMuseo, Nombre, Dirección)

TuplaM

Representación de la tabla con tuplas

2. Entidad débil - Tabla

Cada entidad débil se representa como una tabla, cuyas columnas serán los atributos de ésta, añadiendo una columna más para la llave primaria de la Entidad fuerte de la que depende.

EntidadD

Entidad débil con dependencia de la entidad Empleado

EmpleadoMR

Representación de la entidad Empleado en modelo relacional

Empleado(idEmpleado, nombre, cargo, teléfono, área)

MiembroFamiliarMR

Representación de la entidad débil MiembroFamiliar en modelo relacional

MiembroFamiliar(idEmpleado, nombre, edad, teléfono)

EmpleadoTupla

Representación de la tabla Empleado como tupla

MiembroFamiliarTupla

Representación de la tabla MiembroFamiliar como tupla

3. Relaciones 1:N - Tablas

Se crea una tabla con los atributos de la Entidad del extremo “N” como columnas y una columna del atributo principal de la Entidad del extremo “1”.

1an

Representación relación de 1:N modelo conceptual

MuseoMR

Representación entidad Museo modelo relacional

Museo(idMuseo, Nombre, Dirección)

Entrada

Representación entidad Entrada modelo relacional

Entrada(idEntrada, costo, idMuseo)

MuseoTupla

Representación de la tabla Museo como tupla

EntradaTupla

Representación de la tabla Entrada como tupla

4. Relación N:M - Tabla

Se crea una tabla con los atributos principales de ambas Entidades como columnas y tantas columnas como atributos tenga esa relación.

NaM

Representación de relación N:M en modelo conceptual

ObraMR

Representación de entidad Obra en modelo relacional

Obra(idObra, nombre, antiguedad, fecha adquisición, valuación, seguro)

AutorMR

Representación de entidad Autor en modelo relacional

Autor(idAutor, nombre, periodo)

TieneRM

Representación de relación "tiene" en modelo relacional

Tiene(idAutor, idObra)

ObraTupla

Representación de la tabla Obra en tupla

AutorTupla

Representación de la tabla Autor en tupla

TieneTupla

Representación de la tabla "Tiene" en tupla

5. Relación 1:1 - Clave Primaria

La clave principal de una de las entidades se propaga a la que tenga mayor cardinalidad o, sino, se escoge la opción más lógica en el caso concreto para decidir de qué Entidad será propagada su clave primaria

1a1

Representación de la relación 1:1 en modelo Conceptual

ObraMR

Representación de entidad Obra en modelo relacional

Obra(idObra, nombre, antiguedad, fecha adquisición, valuación, seguro)

Autor2MR

Representación de entidad Autor en modelo relacional

Autor(idAutor, nombre, periodo, idObra)

ObraTupla

Representación de la tabla obra en tupla

AutorTupla2

Representación de la tabla Autor en tupla

6. Restricciones - Dominios

Podemos fijar ciertas restricciones a la hora de realizar tuplas en tablas del modelo relacional que nos ayudaran mucho si luego necesitamos validar un tipo de dato.

Dominios

Podemos definir para nuestro modelo conceptual las siguientes restricciones. Es solo un ejemplo, puede variar.

7. Modelo Relacional generado desde DataModeler para SQL

MuseoMr

Modelo relacional de Museo

Implementando en SQL el modelo relacional

Como en el modelo relacional ya todo está transformado en tablas en SQL solo sería copiar nuestro modelo siguiendo todas las reglas anteriormente establecidas en combinación con la sintaxis de SQL. Veamos:

CREATE TABLE Autor (
    idAutor  NUMBER(4) NOT NULL,
    nombre   VARCHAR2(30),
    periodo  VARCHAR2(30)
);

ALTER TABLE autor ADD CONSTRAINT autor_pk PRIMARY KEY ( idautor );

Tenemos las palabras reservadas CREATE y TABLE como podemos intuir, estos comandos dictan la instrucción de creación de una nueva tabla, en este caso el nombre de la tabla es Autor. A continuación vemos entre paréntesis y finalizado por un ; una seria de instrucciones, dentro podemos observar la creación de los atributos de esta entidad. Para la creación de los atributos basta con escribir primero el nombre, luego tipo de dato (este pedirá su tamaño máximo de caracteres, si aplica) por ultimo una coma , si se va a agregar más de un dato.

Podemos observar que el atributo idAutor tiene un NOT NULL esto es porque será la llave primaria, por tanto, se agrega esa condición. Como este atributo es la clave primaria hace falta un proceso más, ultima línea que podemos observar ALTER ... pone unas restricciones del programa sobre el atributo para hacer la clave primaria. Cualquier otra cantidad de restricciones hacia diferentes atributos seria de forma similar.

Existen muchos tipos de datos y formas de realizar las restricciones sobre los atributos, recomendamos al usuario o usuaria que las consulte en su IDE de trabajo.

En el siguiente Código podemos observar la creación de la tabla Entrada la cual sigue los mismos pasos que la anterior.

CREATE TABLE Entrada (
    idEntrada      NUMBER(4) NOT NULL,
    telefono       NUMBER(3),
    museo_idMuseo  NUMBER(4) NOT NULL
);

ALTER TABLE entradas ADD CONSTRAINT entradas_pk PRIMARY KEY ( identrada );

ALTER TABLE entradas
    ADD CONSTRAINT entrada_museo_fk FOREIGN KEY ( museo_idmuseo )
        REFERENCES museo ( idMuseo );

Como se puede ver la llave foránea a Museo esta como atributo, más abajo se le aplican las reglas para volverla foránea y posteriormente hacer que referencie a el atributo idMuseo.

Por último, con nuestras tablas creadas, SQL nos permite escribir líneas de ccódigo para insertar datos en tablas. En el ejemplo de abajo se estaría insertando una entrada válida para la tabla veamos por qué:

INSERT INTO Autor (idAutor, nombre, periodo)
    VALUES ('6969', 'Leonardo da Vinci', '1452 - 1519');

Primero se debe usar el comando INSERT INTO que creara un nuevo registro y lo pondrá en la tabla que se le diga, en este caso Autor. Entre paréntesis podemos ver que están los atributos que vamos a insertar, esto no es necesario en caso de que el registro sea completo, si ese no es el caso debemos poner entre paréntesis los datos que deseamos ingresar. después se usa la instrucción VALUES para agregar los valores usando ' ' y comas , para separar los datos.

Cabe recordar que, si hemos especificado datos obligatorios, como la llave por ejemplo, y estos no están el programa de compilación arrojara un error. Tendremos errores si violamos las restricciones que hemos puesto.