Advertisement
Guest User

Untitled

a guest
Jun 8th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 8.74 KB | None | 0 0
  1. /*INIZIO DELLE DEFINIZIONI DELLE TABELLE*/
  2.  
  3. --Descrive un Class Diagram
  4. CREATE TABLE ClassDiagram(
  5.     codCD int, --chiave tecnica atta a identificare univocamente un class diagram
  6.     descrizione VARCHAR2 DEFAULT 'Nessuna descrizione', --eventuale descrizione testuale di un class diagram
  7.     dataCreazione TIMESTAMP DEFAULT SYSTIMESTAMP, --rappresenta l'istante di creazione del class diagram
  8.     nome VARCHAR2 DEFAULT 'Nuovo progetto', --rappresenta il nome del class diagram
  9.  
  10.     --chiave primaria
  11.     PRIMARY KEY(codCD)
  12. );
  13.  
  14. /
  15.  
  16. --Descrive una relazione tra classi
  17. CREATE TABLE Associazione(
  18.     codA int, --chiave tecnica atta a identificare univocamente una relazione
  19.     nome VARCHAR2, --rappresenta il nome di una relazione
  20.     grado int DEFAULT 2 NOT NULL, --indica il numero di entità coinvolte
  21.     codCD VARCHAR2 NOT NULL,
  22.     discriminante VARCHAR2, --indica se l'associazione è una e una sola (XOR) tra composizione e aggregazione
  23.  
  24.     --chiave primaria
  25.          primary key(codA),
  26.  
  27.     --il grado deve essere un numero naturale strettamente positivo
  28.     CONSTRAINT dominio_grado CHECK (grado>0),
  29.  
  30.     --l'attributo discriminante specifica esclusivamente se si tratta di una composizione o una aggregazione
  31.     CONSTRAINT dominio_discriminante CHECK (discriminante IN('Associazione', 'Composizione', 'Aggregazione')),
  32.  
  33.     --implementa il vincolo che un class diagram è composto da associazioni e alla sua cancellazione, sono cancellate tutte le associazioni ad esso relative
  34.     CONSTRAINT vincolo_composizione_associazione_cd FOREIGN KEY (codCD)
  35.       REFERENCES ClassDiagram (codcd) ON DELETE CASCADE
  36. );
  37.  
  38. /
  39.  
  40. --Descriva una persona
  41. CREATE TABLE Persona(
  42.     CF CHAR(16), --codice fiscale
  43.     nome VARCHAR2, --nome di una persona
  44.     cognome VARCHAR2, --cognome di una persona
  45.     età int, --età di una persona
  46.     nazione VARCHAR2, --nazione di una persona
  47.     sesso chaar(1), --sesso di una persona
  48.     email VARCHAR2, --email di una persona
  49.  
  50.     -chiave primaria
  51.     PRIMARY KEY(CF),
  52.  
  53.     --imposta un dominio sull'età
  54.     CONSTRAINT dominio_età CHECK (età > 0 AND età < 120),
  55.  
  56.     --il sesso deve essere esclusivamente maschio (M) o femmina (F)
  57.     CONSTRAINT dominio_sesso CHECK (sesso = 'M' OR sesso = 'F'),
  58.  
  59.     --la mail è unicamente associata
  60.     CONSTRAINT email_unica UNIQUE (email)
  61.  
  62.     --le email hanno una forma ben precisa
  63.     CONSTRAINT forma_email CHECK (email LIKE '_%@_%.__%'),
  64.  
  65.     --un CF valido deve necessariamente avere 16 caratteri
  66.     CONSTRAINT lunghezza_CF CHECK (LENGTH(TRIM(cf)) = 16)
  67. );
  68.  
  69. /
  70.  
  71. --Rappresenta un gruppo di persone che disegnano dei class diagram
  72. CREATE TABLE Disegnare(
  73.     CF CHAR(11),
  74.     codCD int,
  75.  
  76.     --chiave esterna verso Persona
  77.     FOREIGN KEY (CF) references Persona (CF),
  78.  
  79.     --chiave esterna verso class diagram
  80.     FOREIGN KEY (codCD) references ClassDiagram (codCD)
  81. );
  82.  
  83. /
  84.  
  85. --Rappresenta una classe
  86. CREATE TABLE Classe(
  87.     codClasse int, --chiave tecnica atta a identificare univocamente una classe
  88.     nome VARCHAR2 NOT NULL, --specifica il nome (necessario) di una classe
  89.     descrizione VARCHAR2 DEFAULT 'Nessuna descrizione inserita', --specifica un'eventuale descrizione
  90.     visibilità VARCHAR2 DEFAULT 'Package' NOT NULL, --specifica una ed una sola delle quattro visibilità possibili
  91.     codCD int NOT NULL,
  92.     codClasseGenerale int, --allude ad una eventuale classe padre
  93.     isAbstract CHAR(1), --verifica se la classe è astratta
  94.  
  95.     --chiave primaria
  96.     PRIMARY KEY (codClasse)
  97.  
  98.     --la visibilità è necessariamente una ed una sola tra le specificate (XOR)
  99.     CONSTRAINT dominio_visibilità CHECK (visibilità IN ('public', 'protected', 'package', 'private')),
  100.  
  101.     --una classe non può auto specializzarsi
  102.     CONSTRAINT no_auto_refine CHECK (codClasse <> codClasseGenerale),
  103.  
  104.     --in un class diagram non ci possono essere due classi con lo stesso nome
  105.     CONSTRAINT "UNIQUE_CLASS_CD" UNIQUE ("NOME", "CODCD"),
  106.  
  107.     --siccome è essenzialmente un bit di validità, ha esattamente due valori possibili
  108.     CONSTRAINT dominio_isAbstract CHECK (isAbstract = 'y' OR isAbstract = 'n')
  109.  
  110.     --implementa il vincolo che un class diagram è composto da classi e alla sua cancellazione, sono cancellate tutte le associazioni
  111.     CONSTRAINT vincolo_composizione_classe_CD FOREIGN KEY (codCD) REFERENCES ClassDiagram (codCD) ON DELETE CASCADE
  112. );
  113.  
  114. /
  115.  
  116. --Rappresenta una classe di associazione
  117. CREATE TABLE ClasseDiAssociazione(
  118.     cod int, --chiave tecnica atta a identificare univocamente una classe di associazione
  119.     nome VARCHAR 2 NOT NULL, --identifica il nome (necessario) di una classe di associazione
  120.    
  121.     --chiave primaria
  122.     PRIMARY KEY(cod),
  123.  
  124.     --chiave esterna verso classe
  125.     FOREIGN KEY(cod) REFERENCES Classe (codClasse)
  126. );
  127.  
  128. /
  129.  
  130. --Rappresenta le partecipazioni tra le classi
  131. CREATE TABLE Partecipa(
  132.     codPartecip int, --chiave tecnica atta a identificare univocamente un class diagram
  133.     ruolo VARCHAR2, --in una partecipazione con una classe, è possibile specificare un ruolo per rendere più chiara la lettura del CD
  134.     molteplicità VARCHAR2, --da notare il varchar per consentire scritture come '1..*. Si veda in seguito',
  135.     codAss int NOT NULL,
  136.     codClasse int NOT NULL,
  137.        
  138.     --chiave priamaria
  139.     PRIMARY KEY (codPartecip),
  140.    
  141.     --chiave esterna verso Associazione
  142.     FOREIGN KEY (codAss) REFERENCES Associazione (codA),
  143.  
  144.     --chiave esterna verso Classe
  145.     FOREIGN KEY (codClasse) REFERENCES Classe (codClasse)
  146. );
  147.  
  148. /
  149.  
  150. --Rappresenta un attributo
  151. CREATE TABLE Attributo(
  152.     codAtt int, --chiave tecnica atta a identificare univocamente un class diagram
  153.     tipo VARCHAR2 NOT NULL, --rappresenta  il tipo di un attributo
  154.     visibilità VARCHAR2 DEFAULT 'Package' NOT NULL, --specifica una ed una sola delle quattro visibilità possibili
  155.     nome VARCHAR2 NOT NULL, --specifica il nome (necessario) di un attributo
  156.     codClasse int NOT NULL,
  157.     isMemorizzato CHAR(1) DEFAULT 'y', --è essenzialmente un bit di validità che specifica se l'attributo è calcolato o memorizzato
  158.  
  159.     --chiave primaria
  160.     PRIMARY KEY (codAtt),
  161.  
  162.     --la visibilità è necessariamente una ed una sola tra le specificate (XOR)
  163.     CONSTRAINT dominio_visibilità CHECK (visibilità IN ('public', 'protected', 'package', 'private')),
  164.  
  165.     --una classe non può avere attributi omonimi
  166.     CONSTRAINT unique_classe_attributo UNIQUE ("NOME", "codClasse")
  167.  
  168.     --siccome è essenzialmente un bit di validità, ha esattamente due valori possibili
  169.     CONSTRAINT dominio_isMemorizzato CHECK (isMemorizzato = 'y' OR isMemorizzato = 'n'),
  170.  
  171.     --la visibilità è necessariamente una ed una sola tra le specificate (XOR)
  172.     CONSTRAINT dominio_visibilità CHECK (visibilità IN ('public', 'protected', 'package', 'private')),
  173.  
  174.     --implementa il vincolo che una classe è composta da attributi e alla sua cancellazione, sono cancellati tutti i suoi attributi
  175.     CONSTRAINT attributo_di_una_classe FOREIGN KEY (codClasse)
  176.         REFERENCES Classe (codClasse) ON DELETE CASCADE
  177. );
  178.  
  179. /
  180.  
  181. --Rappresenta un metodo
  182. CREATE TABLE Metodo(
  183.     codM int, --specifica una ed una sola delle quattro visibilità possibili
  184.     nome VARCHAR2 NOT NULL, --rappresenta il nome (necessario) di un metodo
  185.     visibilità VARCHAR 2 DEFAULT 'Package' NOT NULL, --specifica una ed una sola delle quattro visibilità possibili
  186.     tipoOut VARCHAR 2 NOT NULL, --rappresenta il tipo restituito dal metodo
  187.     descrizione VARCHAR2 DEFAULT 'Nessuna descrizione inserita', --rappresenta un'eventuale descrizione
  188.     codClasse int,
  189.  
  190.     --chiave primaria
  191.     PRIMARY KEY (codM),
  192.  
  193.     --la visibilità è necessariamente una ed una sola tra le specificate (XOR)
  194.     CONSTRAINT dominio_visibilità CHECK (visibilità IN ('public', 'protected', 'package', 'private')),
  195.  
  196.     --chiave esterna verso classe
  197.      CONSTRAINT metodo_di_una_classe FOREIGN KEY (codClasse) REFERENCES Classe (codClasse) ON DELETE CASCADE
  198. );
  199.  
  200. /
  201.  
  202. --Rappresenta un parametro
  203. CREATE TABLE Parametro(
  204.     codP int, --specifica una ed una sola delle quattro visibilità possibili
  205.     nome VARCHAR2 NOT NULL, --rappresenta il nome (necessario) di un CD
  206.     posizione int NOT NULL, --indica la posizione del parametro nella lista dei par. formali del metodo
  207.     tipo VARCHAR2 NOT NULL, --indica il tipo di un parametro
  208.     codMetodo int,
  209.  
  210.     --chiave primaria
  211.     PRIMARY KEY (codP),
  212.        
  213.     --la posizione di un parametro deve essere necessariamente un numero naturale strettamente positivo
  214.     CONSTRAINT posizione_intera CHECK (posizione > 0),
  215.  
  216.     --non sono consentiti più parametri di un metodo nella medesima posizione
  217.     CONSTRAINT unique_posizione_metodo UNIQUE (posizione, codMetodo),
  218.  
  219.     --alla cancellazione di un metodo, sono cancellati tutti i suoi parametri
  220.     FOREIGN KEY (codMetodo) REFERENCES Metodo (codM) ON DELETE CASCADE
  221. );
  222.  
  223. --è un espediente atto ad implementare alcuni vincoli più sofisticati (si veda più avanti)
  224. CREATE TABLE BasicType(
  225.     nome VARCHAR2, --contiene tutti i tipi primitivi di UML
  226.  
  227.     --chiave primaria
  228.     PRIMARY KEY(nome)
  229. );
  230.  
  231. /
  232. /*FINE DELLE DEFINIZIONI DELLE TABELLE*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement