sql >> Base de Datos >  >> RDS >> Database

Diseño de base de datos 101

Un buen ejercicio de modelado de datos para principiantes es crear un modelo de datos de una tienda en línea . Cada vez que doy este ejercicio a mis alumnos, me sorprende lo difícil que es para ellos.

Encuentra los conceptos...

Veamos cómo se puede hacer. Sabemos que tenemos que crear una tabla para cada concepto en el dominio. Piensa en los sustantivosfrases nominales usaría para describir el dominio. Aproximadamente, cada sustantivo es un concepto, un atributo de un concepto o un ejemplo . ¿Cuáles son los conceptos básicos en una tienda online? Inmediatamente me vienen a la mente dos palabras:

  • clientes – personas que compran cosas en nuestra tienda, y
  • productos – artículos que la gente compra en nuestra tienda.

Cada cliente tiene un conjunto básico de datos que lo describen:identificación (por lo general, necesita un atributo de identificación en su tabla), nombre, correo electrónico y contraseña. Del mismo modo, un producto tiene una identificación y un nombre. Podríamos agregar más atributos para clientes y productos, pero por el bien de este ejemplo, estos servirán. Agregamos las dos tablas a nuestro modelo.

... Así como los Conceptos Abstractos

Esta es una tienda, así que obviamente queremos saber qué fue ordenado y por quién . "Orden" es una palabra clave en la mayoría de las bases de datos, por lo que no deberíamos usarla para el nombre de una tabla. En su lugar, usaremos el nombre purchase para la tercera mesa de nuestro modelo. La tabla tiene que estar conectada de alguna manera con el customer y al product . Para empezar, dibujemos una referencia entre purchase y customer , y entre purchase y product .

La customer-purchase la referencia está bien. Cada compra la realiza un cliente; cada cliente puede hacer varias compras. Esta referencia llegó para quedarse.

Sin embargo, hay algo mal con el purchase-product referencia. Se pueden comprar varios productos en una sola compra; varias compras pueden incluir el mismo producto. Pero nuestra referencia solo permite comprar un producto en una sola compra. Eliminemos la referencia y pensemos en una forma diferente de modelarla.

¿Un campo de texto grande para todos los productos comprados?

¿Qué tal si agregamos un campo de texto grande que pueda almacenar los nombres o identificaciones de los productos comprados? Ahora podemos comprar varios productos en una sola compra. Sin embargo, hay algunos problemas aquí:

  • Primero, es difícil verificar que el producto en los purchased_items el campo está realmente en la base de datos.
  • En segundo lugar, si desea cambiar el nombre del producto (porque lo escribió mal), debe actualizar todos los purchased_items instancias de campo en la purchase mesa.
  • Finalmente, es difícil analizar datos en la base de datos. Por ejemplo, si desea averiguar qué producto se compra con mayor frecuencia, debe utilizar una operación de subcadena de texto. Y eso nunca es muy eficiente.

¿Varias columnas de productos en la tabla de compras?

¿Cuáles son las otras opciones? Queremos que una compra esté conectada a varios productos, así que tal vez deberíamos agregar varios purchase_item columnas en una tabla de compras? Bueno, eso es aburrido (solo agregué 5 columnas y me cansé) y crea un artificial y estúpido límite en el número de productos comprados.

¡Usa una mesa intermedia!

La solución tonta insinúa la solución correcta. Queremos tener un ilimitado número de productos relacionados con la compra. La única forma es tener una mesa de conexión intermedia . Llamémoslo purchase_item . El purchase_item la tabla está conectada con purchase y product . Ahora una compra puede incluir tantos productos como queramos. Como beneficio adicional, podemos agregar datos adicionales en la tabla:número de veces que se compró, precio total de este artículo, etc.


Conclusiones:

  • Las tablas en el modelo pueden representar no solo objetos físicos como cliente o producto. Las tablas pueden representar más conceptos abstractos como una compra. Otros ejemplos pueden ser una reserva en un sistema de reservas de hotel, un préstamo de libros en un modelo para biblioteca, una cita en un sistema para médicos, etc.
  • Cuando modela una transacción (es decir, compra o venta de muchas cosas), generalmente necesita tres tablas :uno para la transacción (compra o reserva en un sistema de reserva de hotel), uno para las cosas compradas/vendidas en una transacción (producto, habitación de hotel) y uno para los artículos de la transacción (compra_artículo, reserva_artículo). Puede agregar información adicional en la tabla intermedia si lo necesita.

¡Crea tu propio modelo de base de datos de tiendas con Vertabelo!