36. Modelo lógico

El modelo lógico de una base de datos describe cómo se implementará el modelo conceptual en una base de datos real. Incluye tablas, columnas y relaciones, así como restricciones de integridad y reglas de negocio para garantizar la calidad y la precisión de los datos.

Se crea mediante la normalización de datos y la definición de claves primarias y foráneas. En esencia, el modelo lógico proporciona una descripción detallada de la estructura de la base de datos y cómo se relacionan las diferentes tablas y columnas entre sí.


2 comentarios

Inicia sesión para comentar

Comentarios:

  • Charly Machine

    Charly Machine hace 1 año

    Hola Walter, me surge una duda. En las relaciones uno a uno con users - posts - imagenes.

    ¿No sería más simple añadir a users y posts una clave foranea de imagenes (image_id)?

    • Victor Arana Flores hace 1 año

      Hola Charly, en primer lugar quería aclarar que no me llamo Walter.

      Por otro lado este curso busca explicar todas las relaciones que existen en una bbdd. No es la que se usará a la hora de construir el blog.

  • Walter

    Walter hace 2 años

    ? Modelo Lógico

            La idea del modelo lógico es representar el diagrama ER en un esquema de tablas.

            En dichas tablas tendremos en cuenta el tipo de datos.

            Nombramos las tablas en plural y minúsculas. 

            Los atributos de las tablas los nombramos en singular y también en minúsculas.

     

    ? Primary Key

            Al primer atributo lo nombraremos id y le asignaremos la propiedad Primary Key junto con Not Null y Unique, en el caso que sea de tipo INT también le agregamos Unsigned.

     

    ? Foreign Key

            Es una restricción que se da a un atributo, donde sólo puede guardar valores de llave primaria de otra tabla. 

            La convención de Laravel para nombrar este atributo es: el nombre de la otra tabla en singular seguido de un guion bajo y la palabra id, por ejemplo user_id hace referencia a la llave primaria de la tabla usuarios.

     

    ? Tabla Pivot

            Cuando tenemos una relación de muchos a muchos debemos crear una tercera tabla que guarde dicha relación.

            Para nombrar esta tabla usamos los nombres de las tablas en singular y minúsculas, separadas por un guion bajo y en orden alfabético. Ejemplo si relacionamos users y roles, la tabla pivot se llamará role_user. Teniendo en cuenta que el singular en Laravel, para palabras en español, se forma quitando solo la letra ese final al plural.

            Esta tabla contendrá las llaves foráneas de las tablas relacionadas. Siguiendo el ejemplo serán user_id y role_id.

     

    ? Relaciones Polimórficas uno a uno

            Se da cuando tenemos una relación de uno a uno de dos tablas con una tercera.

            Por ejemplo las tablas users y posts tienen una relación de uno a uno con la tabla images.

            La relación se configura en la tabla images creando los atributos: 

            ? imageable_id

            ? imageable_type

            Ambos atributos forman una primary key compuesta y se elimina el atributo id.

            imageable_id contendrá la llave foránea de users o de posts.

            imageable_type contendrá la ruta al modelo de la tabla users o posts relacionada:

                    App\Models\User

                    App\Models\Post

     

    ? Relaciones Polimórficas uno a muchos

            Por ejemplo las tablas videos y posts tienen una relación de uno a muchos con la tabla comments

            Agregamos a la tabla comments los atributos:

            commentable_id

            commentable_type

            Pero mantenemos ? id como primary key.

     

    ? Relaciones Polimórficas muchos a muchos

            Por ejemplo las tablas videos y posts tienen una relación de muchos a muchos con la tabla tags.

            En este caso debemos crear una cuarta tabla de tipo pivot cuyo nombre puede ser por ejemplo taggables y tendrá un atributo ? id como primary key.

            Esta tabla contendrá el id de la tabla tags como foreign key ? tag_id y los atributos:

            taggable_id contendrá la llave foránea de videos o de posts.

            taggable_type contendrá la ruta al modelo de la tabla videos o posts relacionada:

                    App\Models\Video

                    App\Models\Post