¿Cómo diseñas una base de datos?

Un buen diseño de base de datos comienza con una lista de los datos que desea incluir en su base de datos y lo que desea poder hacer con la base de datos más adelante. Todo esto se puede escribir en su propio idioma, sin ningún SQL. En esta etapa, debe intentar no pensar en tablas o columnas, sino simplemente pensar: “¿Qué necesito saber?” No tome esto demasiado a la ligera, porque si descubre más tarde que olvidó algo, por lo general, debe comenzar de nuevo. Agregar cosas a su base de datos es principalmente mucho trabajo.

Existen muchas herramientas en línea que pueden ayudarlo:

SQLDbm

  • Precio: gratis
  • Ingeniería avanzada: use SQLDBM para crear un modelo físico o ERD de su base de datos
  • Ingeniería inversa: use la función de ingeniería inversa para exportar su esquema de base de datos como un script SQL

caracteristicas:

  • Cree objetos de bases de datos como tablas, objetos, relaciones, índices, de forma rápida e intuitiva.
  • Modifique y edite objetos de base de datos en línea en su diagrama
  • Copiar o mover columnas a través de tablas
  • Acercar y alejar diagramas
  • Diseño sobre el terreno en cualquier lugar en cualquier navegador [1]

DbDesigner.net

  • Precios: versión básica gratuita; versión de pago a partir de $ 50 / año
  • Productos de base de datos compatibles: modele y genere SQL para MySQL, SQLite, SQL Server, PostgreSQL, Oracle
  • Navegadores compatibles: no especificado
  • Ingeniería inversa: Importar SQL desde MySQL (característica descrita como “experimental”)

Vertabelo

  • Precios: versión básica gratuita; versión académica gratuita; versión avanzada disponible para una suscripción mensual a partir de $ 9 / mes o por uso a partir de aproximadamente $ 1 / día; instalación interna a partir de $ 1399 por una tarifa de licencia única
  • Productos de base de datos compatibles: modele y genere SQL para PostgreSQL 9.x, Oracle Database 11g, MySQL 5.5, SQLite 3.7.x, DB2 9.7, SQL Server 2012, HSQLDB 2.3; también exportar modelo como XML
  • Navegadores compatibles: Chrome, Safari (beta)
  • Ingeniería inversa: herramienta gratuita disponible; También puede importar directamente desde un archivo SQL o XML

GenMyModel

  • Precios: versión básica gratuita; versión más avanzada a partir de $ 4 / mes; versión profesional que incluye todas las funciones desde $ 19.20 / mes para usuarios de uno a cinco
  • Productos DB admitidos: modelado neutral del producto; generador genérico de SQL que requiere personalización; generador de SQL de muestra para PostgreSQL; exportar como intercambio de metadatos XML (XMI)
  • Navegadores compatibles: Internet Explorer, Chrome, Firefox, Safari, Opera
  • Ingeniería inversa: parece no haber forma de importar SQL, pero puede importar modelos de Visio 2013 [2]

También debe seguir estas reglas que he encontrado en CodeProject:

  1. ¿Cuál es la naturaleza de la aplicación (OLTP u OLAP)?
  2. Divide tus datos en piezas lógicas, simplifica la vida
  3. No se sobredosifique con la regla 2
  4. Trate los datos no uniformes duplicados como su mayor enemigo
  5. Esté atento a los datos separados por separadores
  6. Esté atento a dependencias parciales
  7. Elija columnas derivadas preciosamente
  8. No sea difícil evitar la redundancia, si el rendimiento es la clave
  9. Los datos multidimensionales son una bestia completamente diferente
  10. Centralizar el diseño de la tabla de valores de nombre
  11. Para datos de referencia jerárquica ilimitados PK y FK [3]

Notas al pie

[1] SqlDbm – Modelador de bases de datos SQL

[2] Cinco servicios de modelado de bases de datos en línea: conversación simple

[3] 11 reglas importantes de diseño de bases de datos que sigo

El primer paso para diseñar una base de datos es comprender cuál será el resultado deseado. Qué informes, consultas, impresiones, formularios se requerirán.
Luego debe comprender cómo se relacionan entre sí los diferentes elementos de datos de estas salidas.
Luego debe comprender la estructura de los datos. Qué elementos dependen de otros, qué piezas son únicas y qué piezas están relacionadas o dependen de otros.
Entonces debe averiguar de dónde vendrán estos datos. ¿Es todo nuevo? ¿Ya hay alguno en otro lugar? ¿Los usuarios necesitan ingresar?
Luego puede ver la definición de “registros” o tuplas de datos, definiendo qué campos se utilizarán para acceder al registro. (Definición de índices)
Luego debe definir el tamaño preferido de cada elemento de datos. Cuántos caracteres para el texto, cuántos dígitos, datos lógicos, datos brutos o no estructurados.

Ahora tiene la información necesaria para definir la base de datos. Cree una base de datos inicial y llénela con datos de prueba para que pueda definir las entradas y salidas (es posible que necesite búsquedas, verificaciones de integridad de datos, elementos de datos requeridos y elementos de datos opcionales).

Pruebe su base de datos para ver si cumple con los requisitos especificados en los primeros pasos. Luego arregle lo que no funciona como se esperaba.

Últimamente estoy usando mucho ORM elocuente en Laravel 4, así que antes de comenzar a crear cualquier tabla de base de datos, esbozo los Modelos (objetos) que contendrán mis datos, definiendo propiedades y métodos que se utilizarán en la aplicación.
Por lo general, empiezo con una hoja de papel grande y escribo “datos reales”, para poder concentrarme en lo que trabajaré, en lugar de hacer un resumen. Dibujar las relaciones entre todos estos espacios de datos me dará el mapa de las relaciones entre los Modelos, que luego se convertirán en tablas DB.
A veces, varios campos en un DB pueden reemplazarse por uno único que contenga una matriz json_encoded, por ejemplo, como contenedor de “configuración de usuario”, por lo que prefiero hacer todo el trabajo de diseño de antemano para evitar demasiadas reescrituras de estructuras de db, un método Modelo puede tenga cuidado de codificar / decodificar los datos.
Una vez hecho esto, escribo las migraciones de DB, ejecútelas y escriba los métodos en los Modelos (prefiero tener modelos gordos y controladores ajustados). El toque final viene con las pruebas de la Unidad, por lo que si modifico algo en la estructura de la base de datos, sabré de inmediato si rompo algo.

Campo de golf:
Documentación ORM elocuente: http://laravel.com/docs/eloquent
Migraciones: http://laravel.com/docs/migrations