mercoledì 5 agosto 2009

Un esempo di notazione "formale" per i modelli E-R

Basta fare un “giro” sul web per vedere che ci sono letteralmente centinaia di diverse notazioni formali per i diagrammi E-R ed i diagrammi relazionali.
Per i modelli relazionali c’è addirittura un vero e proprio linguaggio standard: lo SQL ANSI Standard. Lo SQL standard è sicuramente completo, ma un po’ troppo verboso. La notazione qui sotto, presa dal web, si fa invece apprezzare per la sua sinteticità.


Customer(Customer ID, Tax ID, Name, Address, City, State, Zip, Phone)

Order (Order No, Customer ID, Invoice No, Date Placed, Date Promised, Terms, Status)

Order Line(Order No, Order Line No, Product Code, Qty)

Invoice (Invoice No, Customer ID, Order No, Date, Status)

Invoice Line(Invoice No, Invoice Line No, Product Code, Qty Shipped)

Product(Product Code, Product Description)

Nell’esempio precedente, il nome di ogni tabella del modello relazionale è seguito dall’elenco delle sue colonne. Le colonne chiave sono in neretto. E’ facile verificare che questa notazione “funziona” anche per rappresentare le entità e le relazioni di un modello E-R.
Il diagramma E-R qui sotto è interessante perché “suggerisce” una notazione simbolica molto simile a quella precedente.


Partiamo da questo esempio per introdurre un esempio di notazione "formale" per un modello E-R.

Entity: Titolo( CodiceISIN, DescrizioneTitolo, CodiceEmittente, AnnoEmissione, Scadenza, Importo )
In questo esempio, l’entità Titolo è seguita dall’elenco degli attributi. Gli attributi chiave sono in grassetto. Di solito, l’elenco degli attributi racchiuso tra parentesi sta ad indicare una notazione posizionale, o "vettoriale". In questo tipo di notazione si ha:

(a, b) ≠ (b, a)
Introduciamo ora una notazione differente, insiemistica, nella quale gli oggetti di un elenco non hanno un ordine predefinito. Cioè:

{ a, b } = { b, a }
Applichiamo ora la notazione “insiemistica” per rappresentare l’insieme degli attributi di un’entità o una relazione. Ecco un esempio.

Entity: Titolo { CodiceISIN, DescrizioneTitolo, CodiceEmittente, AnnoEmissione, Scadenza, Importo }
In questa seconda rappresentazione dell’entità Titolo, gli attributi sono racchiusi tra parentesi graffe, come si usa per gli insiemi, in modo da sottolineare che il loro ordine non è importante. Gli attributi chiave (in questo caso, CodiceISIN) sono sottolineati. Ecco un altro esempio delle due notazioni (posizionale ed insiemistica).

Entity: Cedola( CodiceISIN, ProgressivoCedola, Scadenza, Importo )

Entity: Cedola{ CodiceISIN, ProgressivoCedola, Scadenza, Importo }
I due attributi chiave della cedola (CodiceISIN, ProgressivoCedola) sono sottolineati.
Nel seguito useremo tutte e due queste notazioni: quella con le parentesi "tonde" ("posizionale") e quella con le parentesi "graffe" ("insiemistica"). In questo modo sarà facile chiarire, nelle varie situazioni, se l’ordine degli attributi di una entità o relazione è importante o meno.
Osserviamo che, cambiando l’ordine degli attributi, con le due notazioni si hanno risultati differenti:

Cedola( CodiceISIN, ProgressivoCedola, Scadenza, Importo ) ≠ Cedola(ProgressivoCedola, CodiceISIN, Scadenza, Importo )
Mentre gli insiemi degli attributi, anche cambiano il loro ordine, sono coincidenti. Cioè

Cedola{ CodiceISIN, ProgressivoCedola, Scadenza, Importo} = Cedola{ ProgressivoCedola, CodiceISIN, Scadenza, Importo}
Introduciamo ora altre due notazioni per indicare identificare i soli attributi chiave di un’entità. Data un’entità E con attributi chiave K1, K2, … Kn ed attributi non chiave A1, A2 … Am:

E ( K1, K2, … Kn; A1, A2, … Am )
indichiamo con K(E) la n-upla ordinata con i soli attributi chiave di E:

K(E) = ( K1, K2, … Kn )
ed indichiamo con { K(E) }, o con KS(E), l’insieme dei soli attributi chiave di E:

{ K(E) } = KS(E) = { K1, K2, … Kn }

Ecco alcuni esempi.

Entity: Titolo ( CodiceISIN, Scadenza, Importo )

K(Titolo) = ( CodiceISIN )

{ K(Titolo) } = KS(Titolo) = { CodiceISIN }


Entity: Cedola ( CodiceISIN, ProgressivoCedola,Scadenza, Importo )

{ K(Cedola) } = KS(Cedola) = { CodiceISIN, ProgressivoCedola } = { ProgressivoCedola, CodiceISIN }
Ovviamente, detta E un’entità, vale sempre la relazione:


{ K(E) } ⊆ { E }
cioè l'insieme degli attributi chiave dell'entità è un sottoinsieme dei suoi attributi. Ad esempio:


{ K(Titolo) } ⊆ { Titolo }

Riferimenti esterni
§ http://en.wikipedia.org/wiki/Relational_model

Nessun commento:

Posta un commento