Database Tables and Indexes

Has aprendido lo suficiente de los fundamentos en este momento para comenzar a trabajar en tu primer mini proyecto. ¡Hagamos una aplicación de notas! Comenzaremos con la estructura inicial de la base de datos, que nos dará la oportunidad de revisar los índices de MySQL.

Que aprenderemos

  • Table Relationships
  • Indexes

Vamos a crear nueva base de datos:

  • mis_notas Con las Tablas:
  • notes
    • id INT, Primary Key, Auto Increment
    • body Text not null
    • user_id Foreign_Key users(id)
  • users
    • id INT, Primary Key, Auto Increment
    • name Varchar(255), not null
    • email Varchar(255), not null, (unique)

Todo lo vamos hacer a nivel base de datos, con el Database Manager DBeaver.

Paso 1 - Conectarnos a MySQL Local Host

Widgets Test Connection y confirmar que se conecto correctamente!

Paso 2 - Crear Nueva Base de Datos

Widgets

Paso 3 - Crear Tabla notes

Widgets

Paso 4 - Crear Campos id (Columna)

Widgets

id

Widgets

Asignar Primary Key a id

Widgets

Paso 5 - Crear Tabla users

Con el mismo procedimiento anterior creamos los campos id y name.

Hacer el campo de email unique

Tenemos que generar este código: CREATE UNIQUE INDEX users_email_IDX USING BTREE ON mis_notas.users (email); Para generar este código, estando en las propiedades de la tabla users, dar click derecho en el campo email y escoger la opción new index from selection y seleccionar la opción (check box) de unique. Widgets

Y dar click a Salvar! Widgets Con esto se genera el código necesario para crear el unique field

Por ultimo click en Persist. Widgets

Así quedan los campos de la tabla users

Widgets

Paso 6 - Llave foránea user_id en tabla notes

Para la llave foránea (foreign key) user_id para poder relacionar que un usuario creo esta nota, agregamos el campo user_id a la tabla notes

Para Entrar a la pantalla de foreign key en DBeaver Widgets

Y asignar en la pantalla el foreign key así: Widgets

ALTER TABLE mis_notas.notes ADD CONSTRAINT notes_FK FOREIGN KEY (user_id) REFERENCES mis_notas.users(id) ON DELETE CASCADE;

Usamos la propiedad CASCADE de la base de datos MySQL para poder borrar todas las notas relacionadas con el usuario, cuando decidimos borrar al un usuario de nuestra base de datos, tabla users.

Así quedan los campos de la tabla notes

Widgets

Todo el DDl queda así

DDL (El lenguaje de definición de datos)

CREATE TABLE `notes` (
  `id` int NOT NULL AUTO_INCREMENT,
  `body` text NOT NULL,
  `user_id` int NOT NULL,
  PRIMARY KEY (`id`),
  KEY `notes_FK` (`user_id`),
  CONSTRAINT `notes_FK` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Tabla para las notas';