Database
 sql >> Database >  >> RDS >> Database

Parte 2 – Come organizzare un diagramma di database di grandi dimensioni

Nella parte 1 di questa serie, abbiamo importato con successo la struttura del database SuiteCRM nel nostro strumento di modellazione del database online. È allora che abbiamo visto che il modello contiene 201 tabelle senza relazioni tra di loro. Abbiamo un mucchio selvaggio di tavoli che sembravano davvero disordinati. In questo articolo ti mostrerò come organizzare un modello così grande.

Subito dopo l'importazione in Vertabelo, il modello di database di SuiteCRM ha il seguente aspetto:




Il modello funziona, ma non in modo efficiente. Dovremo modificarlo per renderlo davvero utile. Dal momento che vogliamo analizzare il database di SuiteCRM dopo le azioni vengono eseguite sulla sua GUI, è necessario comprendere le definizioni delle tabelle e le relazioni tra le tabelle. Iniziamo raggruppando le tabelle in aree tematiche e stabilendo le relazioni più importanti.

Vertabelo offre tre strumenti principali per aiutarti a organizzare diagrammi di grandi dimensioni:

  • Aree tematiche
  • Tabelle e scorciatoie di visualizzazione
  • Scorciatoie di riferimento

Li descriverò più avanti in questo articolo, ma puoi anche saperne di più guardando questo video.

Passaggio 1. Disabilita la generazione automatica di chiavi esterne

Prima di tutto, disabiliteremo la generazione automatica di chiavi esterne. Per impostazione predefinita, Vertabelo genera attributi di chiave esterna quando estraiamo le relazioni da una tabella primaria a una tabella di riferimento. Di solito è una buona cosa, ma non qui. Abbiamo già attributi che rappresentano chiavi esterne. Quello che ci manca sono le relazioni “reali” tra le tabelle. Per disattivare questa opzione, fai clic su "Il mio account" nel menu in alto e trova le "Preferenze personali" sezione.

L'opzione è disattivata. Ora, quando tracciamo una linea di riferimento tra le tabelle, la linea viene creata, ma dovremo specificare quali attributi vengono utilizzati, sia sul lato primario che su quello esterno.

Passaggio 2. Raggruppa tabelle con prefisso con aree tematiche

Successivamente, raggruppiamo alcune tabelle. Lo faremo utilizzando l'Area argomenti strumento che permette di associare tabelle in base a criteri selezionati. Nel nostro caso, stiamo cercando di identificare le tabelle che sono correlate o che fanno parte dello stesso processo. Ciò si tradurrà in gruppi come "Chiamate", "Riunione" e "Campagne".

Possiamo creare un'area tematica facendo clic su "Aggiungi nuova area" icona nella casella degli strumenti:

e poi disegnando un rettangolo sul nostro modello:

Viene creata l'area tematica. Possiamo vederlo nella "Struttura del modello" pannello a sinistra:

Ciascuna area tematica contiene un elenco di tutti gli oggetti che si trovano all'interno dei suoi bordi; in questo caso si tratta di tabelle e tipi di riferimento.

In SuiteCRM, ci sono molte tabelle che condividono un prefisso comune. Quindi, ho iniziato a raggruppare le tabelle prefissate. Dai un'occhiata alle tabelle "acl" come esempio. Nel pannello "Struttura del modello", ho trovato tutte le tabelle i cui nomi iniziavano con "acl_":

Quindi ho creato l'area tematica "acl" nel modello e vi ho trascinato tutte le tabelle appropriate. (Per una migliore visibilità, ho impostato il colore di sfondo su viola.)

Ora possiamo vedere il gruppo "acl", con un elenco di tutte le tabelle ad esso appartenenti, sotto "Aree degli argomenti" nella "Struttura del modello" :

Ho ripetuto la stessa procedura per tutte le restanti tabelle con prefisso.

Fase 3:disponi i tavoli rimanenti.

La stessa tabella due volte nel diagramma? Scorciatoie da tavolo!

Ci sono circa 80 tabelle prefissate. Dopo averli raggruppati, mi sono rimasti con circa 120 tavoli "selvaggi". Questi sono significativi:memorizzano informazioni su utenti, clienti, chiamate, riunioni e altre cose CRM. Sono molte le informazioni da lasciare a disposizione, quindi ordinate queste tabelle.

La funzione che ho trovato più utile per organizzare queste tabelle si chiama scorciatoie alle tabelle . A volte si desidera utilizzare la stessa tabella più di una volta in un modello. (Perché? Per appiattire il modello ed evitare la sovrapposizione.) Possiamo farlo facilmente utilizzando la "Copia" e "Incolla come scorciatoia" pulsanti.

Seleziona la tabella per la quale desideri creare una scorciatoia e fai clic su "Copia" nella barra degli strumenti in alto (o premi Ctrl + C ):

Per creare una scorciatoia, fai clic su "Incolla come scorciatoia" (o premi Ctrl + K ). Successivamente, apparirà una nuova tabella con un contorno tratteggiato:

Questo non una copia della tabella, ma un'altra istanza della tabella originale. Possiamo posizionarlo ovunque nel nostro modello. Ho usato istanze della stessa tabella in aree tematiche diverse per evitare riferimenti sovrapposti. Vale la pena ricordare che a ogni istanza di tabella è assegnato un nome di area tematica (accanto al nome) mentre si trova all'interno di tale area tematica.

Un buon esempio di come funziona sono gli users tavolo. Può essere trovato in "Utente e account", "Ruoli", "Documenti" e altre aree tematiche. Lo vedremo più avanti nel modello.

Uso ampiamente i collegamenti alle tabelle durante la creazione di aree tematiche con relazioni stabilite tra le tabelle. Per vedere come funziona, guarda l'area tematica "Opportunità" mappata di seguito. Si noti che tutte le tabelle all'interno di quell'area argomenti sono denominate seguendo questa regola:{nome tabella} :{nome area argomento} .

Quando espandiamo il {nome dell'area tematica} nel pannello “Struttura del modello” possiamo vedere chiaramente che contiene tabelle e riferimenti:

L'ho fatto per le seguenti aree tematiche:"Chiamate", "Casi", "Campagna", "Contatti", "Documenti", "Riunione e lead", "Oauth", "Progetti", "Prospetti e email marketing", “Ruoli” e “Utenti e account”. Tutte queste aree condividono uno sfondo azzurro.

Le restanti tabelle sono raggruppate in base al nome e al presunto significato:“Email”, “Utenti (extra)” e “Altre tabelle”. Questi gruppi hanno il colore di sfondo impostato su rosso chiaro.

Quando si fa doppio clic sul nome di una tabella nell'albero di navigazione, la vista eseguirà lo zoom su quella tabella nel modello e la selezionerà. Quando si esegue lo zoom avanti ruotando la rotellina del mouse, la vista verrà ingrandita nella direzione del puntatore del mouse.

Il modello organizzato

Ho usato le opzioni descritte in precedenza per appiattire il modello il più possibile mentre raggruppavo le tabelle in modo logico. Il risultato sono 26 aree tematiche, alcune delle quali contengono solo tabelle mentre altre hanno tabelle e relazioni. Facciamo una rapida rassegna di ciascuna categoria:

Aree tematiche che contengono tabelle e relazioni:

“Chiamate”, “Campagne”, “Casi”, “Contatti”, “Documenti”, “Incontri e lead”, “Opportunità”, “Progetti”, “Prospect e email marketing”, “Ruoli”, “Utenti e account”

Tutte le relazioni sono impostate come non obbligatorie. Ciò conserva le informazioni che queste tabelle sono correlate e tramite quali attributi.

Aree tematiche che contengono solo tabelle:

“acl”, “am”, “aod”, “aok”, “aop”, “aor”, “aos”, “aow”, “Emails”, “fp”, “jwg”, “oauth”, “security_groups ”, “Utenti extra”

Questo non significa che le relazioni non esistano qui; semplicemente non vengono enfatizzati.

L'area tematica "Altre tabelle" è per le tabelle che non rientrano realmente in un gruppo specifico.

Che aspetto ha il modello?

Il modello riorganizzato si presenta così:




Ovviamente è stata utilizzata una convenzione di denominazione. Ecco una panoramica delle linee guida che abbiamo seguito:

  1. I nomi delle tabelle sono per lo più plurali:users , contracts , folders , roles , tasks . Alcuni nomi di tabelle sono singolari, come project .
  2. La chiave primaria nella maggior parte delle tabelle è chiamata semplicemente id ed è un tipo char(36).
  3. Quando si verifica una relazione uno-a-molti, la chiave esterna viene solitamente denominata parent_id . (Esempio:contacts_audit.parent_id è un riferimento a contacts.id .)
  4. Nelle relazioni molti-a-molti, "parent_id ” non può essere utilizzato come nome per più colonne. Viene invece utilizzato un nome di tabella singolare con il suffisso “_id”. (Esempio:contacts_bugs.bug_id fa riferimento a bug.id .)
  5. Ci sono situazioni in cui la stessa colonna viene utilizzata come chiave esterna per più tabelle. (Esempio:calls.parent_id fa riferimento alla colonna id in ciascuna delle seguenti tabelle:accounts , bugs , cases , contacts , leads , tasks , opportunities and prospects . Non ho controllato i valori nel database, ma suppongo che non ci siano gli stessi valori chiave in queste tabelle. Poiché tutti sono di tipo char(36), probabilmente viene utilizzata una combinazione di nome tabella e incremento automatico. Lo verificheremo nei prossimi articoli.)
  6. Utilizziamo gli stessi nomi per colonne che hanno lo stesso significato in tabelle diverse. (Esempio:modified_user_id , created_by e assigned_user_id può essere trovato in molte tabelle nel modello. Tutti sono referenziati a users.id .)

Cosa c'è dopo?

Nei prossimi articoli, utilizzeremo la GUI di SuiteCRM e terremo d'occhio le modifiche che ciò provoca all'interno del database. Con queste informazioni, cercheremo di apportare modifiche al modello, riorganizzare le aree tematiche e stabilire connessioni dove necessario. Inoltre, cercheremo altre regole specifiche di SuiteCRM, come il modo in cui vengono generate le chiavi primarie.

La gestione di diagrammi di database di grandi dimensioni non è mai un lavoro facile. Come costruire una buona base per una casa, dedicare più tempo ai fondamenti ora porterà vantaggi in seguito. Se vogliamo analizzare modelli come quello alla base di SuiteCRM, analizzare prima di aver organizzato la struttura del modello e definito le relazioni tra tabelle lo fa in stile Sisifo.