Diseño y relación de Tablas con PHP y MySQL

Al trabajar en equipos colaborativos ya sea como freelance con desarrolladores de LATAM, India, USA, he incluso viendo cursos y contenido en internet la mayoría de developers ya sea un back-end, suelen tener un conocimiento bastante limitado sobre el diseño de una base de datos relacional suelen usar a lo mucho 1 o 2 tablas he incluso no dominan bien una tecnología (ya sea un ORM como eloquent etc) y tienen la suerte de encontrar un empleo, pero eso ya lo dejamos en manos de los reclutadores elegir el mejor candidato para una empresa o mas bien el peor candidato lo cual es lo mas común y hacer perder dinero a las empresas con personal que no esta capacitado que solo va aprendiendo sobre la marcha, veamos la siguiente estructura de una tabla base usando Laravel framework y las migraciones.

Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->string('role');
            $table->string('product');
            $table->rememberToken();
            $table->timestamps();
        });

En el ejemplo anterior tenemos la migración base con la estructura inicial que plantea el framework, en este ejemplo hemos añadido 2 nuevos campos que son role y product, y a la hora de insertar elementos seria algo como Admin y Trapeadores de tipo string pero esto no es funcional y a la hora que crezca la aplicación será bastante mediocre obtener campos relevantes.

Mejorando la Estructura de Tablas:

En el ejemplo anterior removimos el campo product, ya que un producto puede tener muchos elementos ya sea un nombre, descripción etc, y tener todos estos campos en una sola tabla es un diseño que deja mucho que desear

 Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->unsignedInteger('role_id');           
            $table->rememberToken();
            $table->timestamps();
        });

Creando Nuevas Tablas:

Hemos creado una nueva tabla, donde podemos agregar el numero de elementos que se asocie a product

Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('product_name',255)->nullable();
            $table->string('description',255)->nullable();
            $table->unsignedInteger('price_id');   
            $table->timestamps();
        });

Tabla Pivot:

Ahora hemos creado una tabla pivot aplicando la relación muchos a muchos, la forma de extraer data lo puedes encontrar en la documentación de laravel

Schema::create('users_products', function (Blueprint $table) {
            $table->id();
            $table->unsignedInteger('user_id');
            $table->unsignedInteger('product_id');
            $table->timestamps();
        });

Igualmente podemos crear una tabla para roles, precios y seguir la misma lógica según los requisitos de nuestra aplicación, si recuerdan al principio usamos campos string pero las buenas practica incluye usar enteros para los campos que vamos a relacionar, pero si solo deseas crear aplicaciones básicas tipo CRUD y cosas por el estilo puedes continuar trabajando con 1 sola tabla con información redundante

Nota: Gracias por leer esta articulo, en mi blog puedes encontrar mas artículos sobre un laravel developer y subscribirte al canal de youtube para no perderte mas opciones en plataformas

Etiquetas: Sin etiquetas