fbpx
Skip to main content
  1. DarkSide
  2. Ingegneria Informatica - Triennale
  3. Domenica, 07 Novembre 2004
  4.  Subscribe via email
allora, andate qui:
http://www.cs.wisc.edu/~dbbook/openAccess/thirdEdition/slides/slides3ed-english/Ch3_Rel_Model.pdf

e guardate la slide 24. Da quello che ho capito il vincolo di partecipazione è rappresentato dalle righe spesse tra le due entità e la relazione "Works_in".

Ora, per tradurre tutto lo schema in SQL, che devo fa? Tocca fare 4 tabelle:
[code type="markup"]
CREATE TABLE employee(
ssn INTEGER,
name CHAR(20),
lot CHAR(20),
PRIMARY KEY (ssn));

CREATE TABLE departments(
did INTEGER,
dname CHAR(20),
budget INTEGER,
ssn INTEGER NOT NULL,
PRIMARY KEY (ssn, did),
FOREIGN KEY (ssn) REFERENCES employee);

CREATE TABLE manages(
since DATE,
dname CHAR(20) NOT NULL,
ssn INTEGER NOT NULL,
PRIMARY KEY (ssn, did),
FOREIGN KEY (ssn) REFERENCES employee,
FOREIGN KEY (did) REFERENCES departments ON DELETE NO ACTION);

CREATE TABLE works_in(
since DATE,
dname CHAR(20) NOT NULL,
ssn INTEGER NOT NULL,
PRIMARY KEY (ssn, did),
FOREIGN KEY (ssn) REFERENCES employee,
FOREIGN KEY (did) REFERENCES departments ON DELETE NO ACTION);
[/code]
oppure non ci ho capito un caXXo? Help, ho un BRUTTISSIMO presentimento sull'esonero di martedì! :?

Grazie mille :)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Tutto giusto o quasi :)

Hai fatto collassare (giustamente) in un unica relazione, l'entità departments e la relazione manages, poiché hai un vincolo di chiave (oltre al vincolo di partecipazione).
A questo punto diventa ridondante la relazione manages che hai creato.
Quindi sono 3 relazioni.

Altra cosa: ON DELETE NO ACTION è il default, quindi non è indispensabile scriverlo.
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Da quello che ho capito il vincolo di partecipazione è rappresentato dalle righe spesse tra le due entità e la relazione "Works_in".


Piccola precisazione.
Ogni linea spessa è un vincolo di partecipazione, potevi anche averne una sola: indica semplicemente che tutte le entità dell'insieme partecipano alla relazione a cui l'insieme è collegato tramite la linea spessa (in SQL è tradotto con NOT NULL). Non so se era quello che intendevi tu o no...se lo era pardon :)
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Graaaaaazie!
Comment
There are no comments made yet.
Accepted Answer Pending Moderation
Scusate ragazzi, come riportato sulla slides del prof, il "collassamento" del vincolo di chiave è composto da una sola chiave primaria e una chiave esterna, come mai lui ne ha messe due? Stessa cosa per il vincolo di partecipazione
Comment
There are no comments made yet.
Accepted Answer Pending Moderation

Piccola precisazione.
Ogni linea spessa è un vincolo di partecipazione, potevi anche averne una sola: indica semplicemente che tutte le entità dell'insieme partecipano alla relazione a cui l'insieme è collegato tramite la linea spessa (in SQL è tradotto con NOT NULL). Non so se era quello che intendevi tu o no...se lo era pardon :)


Precisazione sulla precisazione.
La traduzione dei vincoli di partecipazione in SQL è più complessa di quanto ho scritto sopra. Alcuni vincoli (come appunto quelli nella relazione Works_in)non possono essere catturati, se non usando vincoli di tabella e asserzioni che ancora non abbiamo fatto.

In effetti se ci fate caso con la sintassi scritta sopra (NOT NULL) non garantiamo che tutte le entità di impiegati e tutte le entità di reparti partecipino in works_in.

Il tutto è scritto bene nel capitolo 6 del libro (ed. italiana).
Comment
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this post yet.
Be one of the first to reply to this post!