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

Parte 2:cómo organizar un diagrama de base de datos grande

En la Parte 1 de esta serie, importamos con éxito la estructura de la base de datos de SuiteCRM a nuestra herramienta de modelado de bases de datos en línea. Fue entonces cuando vimos que el modelo contiene 201 tablas sin relaciones entre ellas. Tenemos un montón de mesas salvajes que se veían realmente desordenadas. En este artículo, te mostraré cómo puedes organizar un modelo tan grande.

Justo después de importar a Vertabelo, el modelo de base de datos de SuiteCRM tiene el siguiente aspecto:




El modelo funciona, pero no de manera eficiente. Tendremos que modificarlo para que sea realmente útil. Dado que queremos analizar la base de datos de SuiteCRM después las acciones se realizan en su GUI, necesitamos comprender las definiciones de las tablas y las relaciones entre las tablas. Comencemos por agrupar las tablas en áreas temáticas y establecer las relaciones más importantes.

Vertabelo ofrece tres herramientas principales para ayudarte a organizar diagramas grandes:

  • Áreas temáticas
  • Tablas y atajos de vista
  • Accesos directos de referencia

Los describiré más adelante en este artículo, pero también puede obtener más información viendo este video.

Paso 1. Deshabilitar la Generación Automática de Claves Foráneas

En primer lugar, deshabilitaremos la generación automática de claves foráneas. De forma predeterminada, Vertabelo genera atributos de clave externa cuando extraemos relaciones de una tabla principal a una tabla de referencia. Esto suele ser algo bueno, pero no aquí. Ya tenemos atributos que representan claves foráneas. Lo que nos falta son relaciones “reales” entre tablas. Para desactivar esta opción, haga clic en “Mi cuenta” en el menú superior y busca las “Preferencias personales” sección.

La opción está desactivada. Ahora, cuando dibujamos una línea de referencia entre tablas, la línea se crea, pero tendremos que especificar qué atributos se usan, tanto en el lado primario como en el externo.

Paso 2. Agrupar tablas prefijadas con áreas temáticas

A continuación, agrupemos algunas tablas. Haremos esto usando el área de asunto herramienta que permite asociar tablas en base a criterios seleccionados. En nuestro caso, estamos tratando de identificar tablas que estén relacionadas o sean parte del mismo proceso. Esto dará como resultado grupos como "Llamadas", "Reunión" y "Campañas".

Podemos crear un área temática haciendo clic en “Agregar nueva área” icono en la caja de herramientas:

y luego dibujar un rectángulo en nuestro modelo:

Se crea el área temática. Lo podemos ver en la “Estructura del modelo” panel de la izquierda:

Cada área temática contiene una lista de todos los objetos que se encuentran dentro de sus bordes; en este caso, se trata de tablas y tipos de referencia.

En SuiteCRM, hay muchas tablas que comparten un prefijo común. Entonces, comencé a agrupar las tablas prefijadas. Eche un vistazo a las tablas "acl" como ejemplo. En el panel "Estructura del modelo", encontré todas las tablas cuyos nombres comenzaban con "acl_":

Luego creé el área de asunto "acl" en el modelo y arrastré todas las tablas correspondientes a él. (Para una mejor visibilidad, configuré el color de fondo en púrpura).

Ahora, ahora podemos ver el grupo "acl", con una lista de todas las tablas que pertenecen a él, en "Áreas temáticas" en la “Estructura del modelo” :

Repetí el mismo procedimiento para todas las tablas prefijadas restantes.

Paso 3:Organice las mesas restantes.

¿La misma tabla dos veces en el diagrama? ¡Atajos de mesa!

Hay alrededor de 80 tablas prefijadas. Después de agruparlos, me quedé con alrededor de 120 mesas 'salvajes'. Estos son significativos:almacenan información sobre usuarios, clientes, llamadas, reuniones y otras cosas de CRM. Esa es mucha información para permanecer en libertad, así que ordenemos estas tablas.

La función que encontré más útil para organizar estas tablas se llama accesos directos de tabla . A veces desea utilizar la misma tabla más de una vez en un modelo. (¿Por qué? Para aplanar el modelo y evitar la superposición). Podemos hacer esto fácilmente usando “Copiar” y “Pegar como acceso directo” botones.

Simplemente seleccione la tabla para la que desea crear un acceso directo y haga clic en "Copiar" en la barra de herramientas superior (o presione Ctrl + C ):

Para crear un acceso directo, haga clic en "Pegar como acceso directo" (o presione Ctrl + K ). Después de eso, aparecerá una nueva tabla con un contorno punteado:

Esto es no una copia de la tabla, pero otra instancia de la tabla original. Podemos colocarlo en cualquier parte de nuestro modelo. Usé instancias de la misma tabla en diferentes áreas temáticas para evitar la superposición de referencias. Vale la pena mencionar que cada instancia de tabla tiene un nombre de área de asunto asignado (junto a su nombre) mientras está dentro de esa área de asunto.

Un buen ejemplo de cómo funciona esto son los users mesa. Se puede encontrar en "Usuario y Cuentas", "Roles", "Documentos" y otras áreas temáticas. Veremos esto más adelante en el modelo.

Utilizo atajos de tablas mucho cuando creo áreas temáticas con relaciones establecidas entre tablas. Para ver cómo funciona esto, mire el área temática "Oportunidades" que se muestra a continuación. Observe que todas las tablas dentro de esa área temática se nombran siguiendo esta regla:{table name} :{subject area name} .

Cuando expandimos el {nombre del área temática} en el panel “Estructura del modelo”, podemos ver claramente que contiene tablas y referencias:

Hice esto para las siguientes áreas temáticas:"Llamadas", "Casos", "Campaña", "Contactos", "Documentos", "Reunión y clientes potenciales", "autorización", "Proyectos", "Prospectos y marketing por correo electrónico", “Roles”, y “Usuarios y cuentas”. Todas estas áreas comparten un fondo azul claro.

Las tablas restantes se agrupan en función de su nombre y supuesto significado:"Correos electrónicos", "Usuarios (extra)" y "Otras tablas". Estos grupos tienen el color de fondo establecido en rojo claro.

Cuando hace doble clic en el nombre de una tabla en el árbol de navegación, la vista se acercará a esa tabla en el modelo y la seleccionará. Cuando hace zoom girando la rueda del mouse, la vista se acercará en la dirección del puntero del mouse.

El modelo ordenado

Usé las opciones descritas anteriormente para aplanar el modelo tanto como fuera posible mientras agrupaba las tablas de forma lógica. El resultado son 26 áreas temáticas, algunas de las cuales contienen solo tablas, mientras que otras tienen tablas y relaciones. Hagamos una revisión rápida de cada categoría:

Áreas temáticas que contienen tablas y relaciones:

“Llamadas”, “Campañas”, “Casos”, “Contactos”, “Documentos”, “Reuniones y prospectos”, “Oportunidades”, “Proyectos”, “Prospectos y marketing por correo electrónico”, “Roles”, “Usuarios y cuentas”

Todas las relaciones se establecen como no obligatorias. Esto mantiene la información de que estas tablas están relacionadas y a través de qué atributo(s).

Áreas temáticas que solo contienen tablas:

“acl”, “am”, “aod”, “aok”, “aop”, “aor”, “aos”, “aow”, “Correos electrónicos”, “fp”, “jwg”, “oauth”, “grupos_de_seguridad ”, “Usuarios extra”

Esto no quiere decir que las relaciones no existan aquí; simplemente no se enfatizan.

El área de asunto "Otras tablas" es para tablas que realmente no encajan en un grupo específico.

¿Qué aspecto tiene el modelo?

El modelo reorganizado se ve así:




Obviamente se ha utilizado una convención de nomenclatura. Aquí hay una descripción general de las pautas que seguimos:

  1. Los nombres de las tablas son en su mayoría plurales:users , contracts , folders , roles , tasks . Algunos nombres de tablas son singulares, como project .
  2. La clave principal en la mayoría de las tablas se llama simplemente id y es de tipo char(36).
  3. Cuando ocurre una relación de uno a muchos, la clave externa generalmente se llama parent_id . (Ejemplo:contacts_audit.parent_id es una referencia a contacts.id .)
  4. En relaciones de muchos a muchos, “parent_id ” no se puede usar como nombre para varias columnas. En su lugar, se utiliza un nombre de tabla singular con el sufijo "_id". (Ejemplo:contacts_bugs.bug_id es una referencia a bug.id .)
  5. Hay situaciones en las que la misma columna se usa como clave externa para varias tablas. (Ejemplo:calls.parent_id se hace referencia a la columna id en cada una de las siguientes tablas:accounts , bugs , cases , contacts , leads , tasks , opportunities and prospects . No he comprobado los valores en la base de datos, pero creo que no hay valores clave iguales en estas tablas. Dado que todos son de tipo char(36), probablemente se utilice alguna combinación de nombre de tabla y autoincremento. Lo comprobaremos en próximos artículos).
  6. Usamos los mismos nombres para columnas que tienen el mismo significado en diferentes tablas. (Ejemplo:modified_user_id , created_by y assigned_user_id se puede encontrar en muchas tablas en el modelo. Todos ellos están referenciados a users.id .)

¿Qué sigue?

En los próximos artículos, usaremos la GUI de SuiteCRM y estaremos atentos a los cambios que esto provoca dentro de la base de datos. Con esa información, intentaremos hacer cambios en el modelo, reorganizar las áreas temáticas y establecer conexiones donde sea necesario. Además, buscaremos otras reglas específicas de SuiteCRM, como la forma en que se generan las claves principales.

Manejar grandes diagramas de bases de datos nunca es un trabajo fácil. Al igual que construir una buena base para un hogar, dedicar más tiempo a los fundamentos ahora traerá ventajas más adelante. Si queremos analizar modelos como el que está detrás de SuiteCRM, analizar antes de haber organizado la estructura del modelo y definir las relaciones de las tablas es hacerlo al estilo Sísifo.