La base de datos es una ciudad gigante: diseñando una ciudad con Rails para comprender intuitivamente la base de datos
Hasta ahora, hemos comparado la base de datos (DB) con un armario o una caja.
Esta vez, vamos a un mundo completamente diferente.
Pensemos en DB = ciudad.
Una ciudad tiene zonas, edificios, y dentro de ellos, muchas habitaciones.
Base de datos = ciudad entera
Tabla = edificio
Registro = habitación
Columna = atributos de la habitación (tamaño, uso, precio, etc.)
La metáfora de la ciudad es la metáfora más natural para entender los conceptos estructurales de la base de datos y el modelo de datos relacional.
Ahora, diseñemos directamente una "ciudad" con Rails y experimentemos cómo se estructura la base de datos.
Parte 1. Construyendo el primer edificio en la ciudad llamada DB
En la terminal:
rails generate model Building name:string floors:integer
rails db:migrate
Esta orden se puede interpretar así.
"Voy a construir un edificio llamado Building en la ciudad (DB).
El edificio tiene dos atributos: nombre (name) y número de pisos (floors)."
Rails, basándose en esta orden, construye edificios en la ciudad y define los atributos comunes (habitaciones) de cada edificio.
Ahora, en nuestra ciudad, existe un edificio llamado Building.
Parte 2. Permitir la creación de "habitaciones" dentro del edificio
Para que las personas puedan vivir en un edificio (Building) y se puedan cobrar alquileres, y para que la ciudad tenga sentido, creemos la tabla de habitaciones (Room).
rails generate model Room number:string size:integer building:references
rails db:migrate
Esto significa:
"Creemos una habitación llamada Room,
y mostrémos a qué Building (edificio) pertenecen esas habitaciones."
Rails automáticamente crea una columna llamada building_id para conectar las habitaciones con el edificio al que pertenecen.
Esto es la relación de la base de datos.
(Tan natural en la metáfora de la ciudad que casi no necesita explicación).
Parte 3. Enseñando a Rails la "relación entre edificios y habitaciones"
app/models/building.rb
class Building < ApplicationRecord
has_many :rooms
end
app/models/room.rb
class Room < ApplicationRecord
belongs_to :building
end
Ahora Rails lo entiende completamente.
Un edificio (Building) tiene varias habitaciones (Room)
Una habitación (Room) pertenece necesariamente a un edificio (Building)
En la metáfora de la ciudad, es el momento en que te das cuenta de que la estructura tan obvia es el principio fundamental de la base de datos.
Parte 4. Construyendo un "edificio" directamente en la Consola
En la consola de Rails:
b = Building.create(name: "Torre Estelar", floors: 30)
Aquí, en nuestra ciudad (DB), hemos construido un edificio real llamado 'Torre Estelar'.
Parte 5. Creando habitaciones en el edificio
b.rooms.create(number: "101", size: 28)
b.rooms.create(number: "102", size: 33)
b.rooms.create(number: "201", size: 40)
Ahora, en el edificio 'Torre Estelar', se han creado 3 habitaciones.
En este momento, la estructura ciudad -> edificio -> habitación se alinea perfectamente con la esencia estructural de la base de datos.
Parte 6. Veamos las habitaciones
(Sentirse como si estuvieras viendo la lista de habitaciones de un edificio en la ciudad)
b.rooms
Rails solicita esto.
"¡Muéstrame todas las habitaciones de este edificio (Building)!"
La base de datos, entre los millones de edificios de la ciudad, encuentra exactamente las habitaciones que pertenecen a la 'Torre Estelar'.
Esta es la razón por la cual la base de datos puede administrar todos los datos de manera rápida y precisa como el 'sistema administrativo de la ciudad' de los servicios web modernos.
Parte 7. Encontrar habitaciones basadas en atributos específicos
(Sensación de búsqueda de bienes raíces)
Room.where(size: 33)
Esta orden significa:
"Encuentra todas las habitaciones en la ciudad donde el tamaño es 33."
Al igual que buscar información de una habitación en la web, la base de datos selecciona solo las habitaciones que cumplen con las condiciones de entre miles o incluso millones.
Parte 8. Ahora, el lector entiende
"Ah... la base de datos es una ciudad,
la tabla es un edificio,
y el registro es una habitación, todo tiene tanto sentido.""De hecho, construir una ciudad con Rails
hace que los conceptos sean más claros en mi mente.""Entonces, ¿podría diseñar los datos de un servicio web
como diseñaría una ciudad?"
En el momento en que sientes esto,
la base de datos ya no es una tecnología abstracta.
Ahora eres un desarrollador con la mentalidad de un arquitecto.