Domanda

Sono modellazione di un diagramma entità-relazioni e ottenuto bloccato. Non sono sicuro se le mie considerazioni sono errati o un disco di ripristino non possono modell quello che voglio:

Ho tre entità: Impiegato, progetto e ruolo. C'è una relazione tra dipendenti e Project: un impiegato sta lavorando su un progetto. Ma questo dipendente non è solo lavorando a questo progetto, lui / lei ha un campo di attività che viene dato come un ruolo. Ma non è un rapporto appena descritto per attributi? Come posso fare qualcosa di simile a "opere dei dipendenti Una su questo progetto come ..."? Naturalmente ho avuto utilizzare un ID ruolo come attributo come vorrei progettare come un database, ma qual è il rapporto in un disco di ripristino?

È stato utile?

Soluzione

Come modellare una relazione ... entità ... attributo?

Prima di progettare il database che voglio modellare il problema come un diagramma entità-relazione (usando la notazione di Chen). In questo diagramma Voglio creare una relazione tra lavoratore e progetto senza avere uno sguardo alla consegna delle chiavi e vincoli che seguono. Addendum: so solo i rapporti tra due entità che si estendono per attributi, ma come faccio a modello di questa "tre entità-relazione"

?

Questo è del tutto comprensibile e del tutto corretto. La carta è a buon mercato, gli oggetti in un database sono un po 'più costoso al cambiamento. Modellare il requisito e continuare a migliorare, fino a quando si è sicuri, poi implementare.

Il problema di molti siti è, ci sono molti falegnami, che anche se ben intenzionati, vedere ogni problema come un chiodo, e forniscono DDL, non l'assistenza di modellazione richiesto. Ciò che manca è il contesto e significato, in modo che il risultato finale è un'implementazione hard-e-veloce con "chiavi" fisse ma manca contesto e significato. Modeling ci permette di modellare i vari aspetti che sono rilevanti per noi, senza preoccupazione per quello che sarebbe simile in DDL.

Un altro modo per dire che è, OMG ha risposto a una domanda come faccio Modello "un dipendente lavora su questo progetto come ..." in isolamento; Io rispondo tutta la tua domanda nel contesto.

A livello di logica, molti-a-molti rapporti sono corretti. Tali rapporti senza altre considerazioni sono resi a livello fisico come tabelle associativi. Ma ancora una volta, è troppo presto per decidere che, in quanto si sta ancora modellando il contesto e il significato delle relazioni.

... e non è nemmeno nel regno della notazione SO markdown di fornirle. IME, strumenti come Oracle Designer generare tali schemi dopo aver creato le entità

Sciocchezze. L'intera idea di modellazione è quello di sviluppare e migliorare qualcosa su carta, utilizzando diagrammi, a lungo prima di scrivere una riga di codice, o l'acquisto di una piattaforma, o di dover implementare DDL. Il commento è di circa semplicemente reverse-engineering di un database esistente, dopo il fatto, che molti prodotti offrono.

Esempio di modellazione, progressione

Usare qualsiasi simboli sono significativo per voi, a modello quello che ti serve. Naturalmente simboli standard sono più universalmente comprensibili. Ecco un
ERD per voi
(Non ho idea di come "la notazione SO Markdown" pone una limitazione sulla fornitura di prima-il-fatto consiglio di modellazione). Ho fornito un esempio della progressione che potrebbe verificarsi. Nulla è "giusto" o "sbagliato", è tutti i pezzi di carta; fino a si decidere quali elementi sono la pena di conferma, e quindi la progressione successiva è possibile.

  1. Il punto di partenza è, naturalmente, semplici molti-a-molti rapporti, che si sa alcuni le cose su, secondo il vostro titolo. Cercando di modellare un nozionale relazione a tre vie non è corretto, un errore di modellazione: per risolvere un triangolo amoroso è necessario identificare prima i rapporti discreti tra ciascuna delle parti, separatamente; che significa che tutti i rapporti sono solo due vie.

  2. Il progetto, per i dipendenti di ruolo e le entità sono chiare, e sappiamo qualcosa su di loro. Qui ho lasciato i maggiori Enti non sviluppata, perché sono "forti", e non ciò che si sta concentrandosi su sono.

  3. L'uso di progressione esempio attributi di una relazione , è possibile utilizzare il proprio. (Il nostro collega belga ha già individuato il problema a parole, sto semplicemente dotandolo in immagini.) C'è molto che le persone non fanno in pratica comune, che dovrebbero fare; Sono preoccupato per la modellazione vera, dall'alto, verso il basso, al fine di progredire e arrivare al modello di dati corretti. Rimuovere tutto ciò che è spazzatura, e continuare progressing.

  4. Ho fatto ipotesi che il attributi del rapporto giustificare un'Entità, così ho ora li disegnato in. Qui ho usato ovali, è possibile utilizzare i diamanti o chevron per tutti mi interessa, basta usare qualche simbolo, per modellare quello che ti serve.

  5. Ecco che arriva al punto in cui possiamo vedere chiaramente: non vogliamo Progetto :: :: dipendenti di ruolo, perché questo avrebbe permesso a un dipendente di svolgere alcun ruolo; vogliamo dipendenti di essere selezionati solo se vi sono precedentemente stati approvati per quel ruolo. Così, Impiegato :: ruolo sta diventando sempre più "forte".

  6. Pertanto, Impiegato :: ruolo è un'entità. E la rosa, cosa è un bambino di quella specifica combinazione o Dipendente + ruolo, non di tutti i dipendenti e di tutti i ruoli.

  7. Allo stesso modo, non vogliamo alcun dipendenti di prendere ogni possibile lavoro in ogni possibile progetto, vogliamo che prendono i lavori approvati in progetti approvati. Così Progetto :: ruolo sta diventando una forte identità, e ha gli attributi in ogni caso.

  8. Pertanto, Project :: ruolo è un'entità. E che rimanere ovale è un figlio di quella specifica combinazione di Progetto + ruolo, non di tutti i progetti.

  9. La nostra rosa raggiunge Child Status Entità, con i suoi attributi specifici. Più importante, i suoi vincoli derivano da Enti in precedenza vincolate, non quelli semplici.

  10. Dati ha un ordine naturale o una gerarchia, e un diagramma disegnato con questo in mente è molto facile da capire. Ora abbiamo la possibilità di guardare gli attributi. Essi possono essere sembrata la stessa o simile o confondere; mentre ora hanno un significato chiaro, a causa di contesto e la gerarchia.

ho introdotto il concetto di identificatori , senza espanderlo, lascerò che per la discussione, se è necessario. Penso che si può vedere che gli identificatori sono in realtà molto, molto importante, e sono esposti come una parte normale della modellizzazione.

In termini generali (la tua domanda, in contrasto con il mio esempio progressione), quando si arriva a normalizzazione, i tre ovali iniziali possono finire come uno o due o rimanere come tre oggetti; semplici tavoli associativi senza attributi; o come vere e proprie entità con attributi ... ma non lo facciamo, e non deve preoccuparsi che in questo momento. E ancora, è troppo presto per DDL, o per la normalizzazione in questa fase. Abbiamo idea di cosa i tasti sono; quali attributi sono associati con essi; e in che rapporto con loro. Cosa c'è di più, non ci interessa. In termini di esempio, sì, le entità sono chiare ed inequivocabili.

Feedback per favore, in modo che si può progredire.

Modifica:. Diagramma aggiornato, più pagine

Altri suggerimenti

IMPIEGATO

  • employee_id (pk)

PROGETTO

  • project_id (pk)
  • project_description

RUOLO

  • ROLE_ID (pk)
  • role_description

Se un dipendente può avere un solo ruolo per progetto:

EMPLOYEE_PROJECT_MAP

  • project_id (pk, fk a PROJECT)
  • employee_id (pk, fk a IMPIEGATO)
  • ROLE_ID (fk a RUOLO)

Se un dipendente può avere solo 1+ ruolo per progetto:

EMPLOYEE_PROJECT_MAP

  • project_id (pk, fk a PROJECT)
  • employee_id (pk, fk a IMPIEGATO)
  • ROLE_ID (pk, fk a RUOLO)

La differenza tra i due è la chiave primaria composta comprende ruolo nella seconda versione. Essendo un composito chiave primaria di tutte e tre colonne, la combinazione dei valori deve essere unico, rendendo vale quanto segue:

project_id  employee_id  role_id
---------------------------------
1           1            1
1           1            2

considerando se ROLE_ID è non inclusa nella chiave primaria composta, solo una combinazione di utente e progetto può essere fatto - che significa un utente potrebbe avere un solo ruolo.

Un vincolo CHECK non sarebbe lavoro - controlla solo la fila, non l'intera tabella. Mentre un trigger avrebbe funzionato, perché preoccuparsi quando si può far rispettare il rapporto tramite una chiave primaria composita o vincolo univoco? Un trigger non sarebbe visibile in un disco di ripristino, né affermazioni come CREATE TABLE o DESC table_name.

"Prima di progettare il database che voglio modellare il problema come un diagramma entità-relazione (usando la notazione di Chen). In questo diagramma Voglio creare una relazione tra lavoratore e progetto senza avere uno sguardo alla consegna delle chiavi e vincoli che seguire ".

Se il rapporto "funziona-on" tra i due (dipendenti e del progetto) è molti-a-molti, e che rapporto ha ulteriori attributi che descrivono (/ che fornisce ulteriori dettagli circa) (occorrenze di) il rapporto, quindi è spesso non hanno altra scelta che quella di "un'istanza di" il rapporto, vale a dire definendolo come un'entità in più. Alcuni strumenti supportano un dialetto disco di ripristino permette di specificare attributi aggiuntivi per qualsiasi rapporto (in una scatola arrotondata segnaletica del alla freccia), ma questo non è imo pratica comune.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top