exSnake

Untitled

Dec 9th, 2020
878
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. USE del2;
  3.  
  4. create table clienti
  5. (
  6.     email varchar(50) primary key,
  7.     nome varchar(50) not null,
  8.     cognome varchar(50) not null,
  9.     telefono varchar(20) not null,
  10.     data_reg date not null
  11. );
  12.  
  13. create table indirizzi
  14. (
  15.     via varchar(50),
  16.     civico varchar(20),
  17.     cap varchar(5),
  18.     citta varchar(50),
  19.     provincia varchar(2),
  20.     cliente_email varchar(50),
  21.     #se viene eliminato il cliente, anche i suoi indirizzi vengono cancellati
  22.     foreign key (cliente_email) references clienti(email) on update cascade on delete cascade,
  23.     #ogni indirizzo e' associato ad un solo cliente
  24.     primary key (via, civico, cap, citta ,provincia ,cliente_email)
  25. );
  26.  
  27. create table ristoranti
  28. (
  29.     #il ristorante viene identificato tramite id per permettere piu occorrenze della stessa catena
  30.     id int auto_increment primary key,
  31.     piva varchar(16) not null,
  32.     denominazione varchar(50) not null,
  33.     ragione_sociale varchar(50) not null,
  34.     tipologia varchar(50) not null,
  35.     ordini_coda smallint not null,
  36.     coda_max smallint not null,
  37.     telefono varchar(20) not null,
  38.     email varchar(50) not null,
  39.     via varchar(50) not null,
  40.     civico varchar(20) not null,
  41.     cap varchar(5) not null,
  42.     citta varchar(50) not null,
  43.     provincia varchar(2) not null
  44. );
  45.  
  46. create table orari_apertura(
  47.     #giorno puo assumere valore da 1 a 7, dove 1 e lunedi 7 e domenica
  48.     giorno tinyint unsigned,
  49.     ora varchar(11),
  50.     ristorante_id int,
  51.     #se viene eliminato il ristorante, anche i suoi orari di apertura vengono cancellati
  52.     foreign key (ristorante_id) references ristoranti(id) on update cascade on delete cascade,
  53.     #es. formato (1, '09:00-13:00', 32)
  54.     primary key (giorno, ora, ristorante_id)
  55. );
  56.  
  57. create table deliveries
  58. (
  59.   codice int auto_increment primary key,
  60.   ristorante_id int,
  61.   tipologia varchar(50) not null,
  62.   descrizione varchar(50) not null,
  63.   data_inizio date not null,
  64.   cadenza varchar(20) not null,
  65.   #se viene eliminato il ristorante, anche i suoi servizi di delivery vengono eliminati
  66.   foreign key (ristorante_id) references ristoranti(id) on update cascade on delete cascade
  67. );
  68.  
  69. create table societa
  70. (
  71.     piva varchar(16) primary key,
  72.     cf varchar(16) not null,
  73.     email varchar(50) not null,
  74.     denominazione varchar(50) not null,
  75.     amminstratore varchar(50) not null,
  76.     via varchar(50) not null,
  77.     civico varchar(20) not null,
  78.     cap varchar(5) not null,
  79.     citta varchar(50) not null,
  80.     provincia varchar(2) not null
  81. );
  82.  
  83. create table affidi
  84. (
  85.     delivery_codice int,
  86.     societa_piva varchar(16),
  87.     #se viene eliminato un servizio di delivery, anche il collegamento ai servizi a cui si affidava viene rimosso
  88.     foreign key (delivery_codice) references deliveries(codice) on update cascade on delete cascade,
  89.     foreign key (societa_piva) references societa(piva) on update cascade on delete cascade,
  90.     primary key (delivery_codice, societa_piva)
  91. );
  92.  
  93. create table persone
  94. (
  95.     cf varchar(16) primary key,
  96.     nome varchar(50) not null,
  97.     cognome varchar(50) not null,
  98.     telefono varchar(20) not null,
  99.     email varchar(50) not null
  100. );
  101.  
  102. create table riders
  103. (
  104.     persona_cf varchar(16),
  105.     disponibilita boolean not null,
  106.     score_medio decimal(2,2),
  107.     num_valutazioni int,
  108.     num_impiego smallint,
  109.     data_primo_impiego date not null,
  110.     automunito boolean not null,
  111.     targa varchar(10) null,
  112.     tipo_veicolo varchar(50) null,
  113.     #se viene eliminata la persona associata, anche il rider, essendo entita debole, viene eliminato.
  114.     foreign key (persona_cf) references persone(cf) on update cascade on delete cascade,
  115.     primary key(persona_cf)
  116. );
  117.  
  118. create table impieghi
  119. (
  120.     societa_piva varchar(16),
  121.     rider_persona_cf varchar(16),
  122.     quota_oraria decimal(10,2) not null,
  123.     data_impiego date not null,
  124.     #se vengono eliminati o societa o rider, anche la loro collaborazione viene eliminata.
  125.     foreign key (societa_piva) references societa(piva) on update cascade on delete cascade,
  126.     foreign key (rider_persona_cf) references riders(persona_cf) on update cascade on delete cascade,
  127.     primary key (societa_piva, rider_persona_cf)
  128. );
  129.  
  130. create table valutazioni
  131. (
  132.     rider_cf varchar(16),
  133.     cliente_email varchar(50),
  134.     data_valutazione date not null,
  135.     valutazione tinyint unsigned not null,
  136.     #non si possono eliminare rider?
  137.     foreign key (rider_cf) references riders(persona_cf) on update cascade on delete restrict,
  138.     foreign key (cliente_email) references clienti(email) on update cascade on delete restrict,
  139.     primary key (cliente_email, rider_cf)
  140. );
  141.  
  142. create table dipendenti
  143. (
  144.     persona_cf varchar(16),
  145.     stato varchar(20) not null,
  146.     anni_esperienza tinyint unsigned,
  147.     curriculum text not null,
  148.     delivery_codice int,
  149.     #se viene eliminata la persona, essendo un entita debole, viene eliminato anche dipendente
  150.     foreign key (persona_cf) references persone(cf) on update cascade on delete cascade,
  151.     #se viene eliminato il servizio di delivery associato, viene settato a null
  152.     foreign key (delivery_codice) references deliveries(codice) on update cascade on delete set null,
  153.     primary key (persona_cf)
  154. );
  155.  
  156. create table ordini
  157. (
  158.     num_ordine smallint unsigned,
  159.     data_ordine date,
  160.     ristorante_id int,
  161.     cliente_email varchar(50),
  162.     destinazione varchar(200),
  163.     tipo varchar(50) not null,
  164.     descrizione varchar(50) not null,
  165.     stato varchar(20),
  166.     stima_orario datetime null,
  167.     persona_cf varchar(16),
  168.     orario_consegna datetime null,
  169.     nominativo_consegna varchar(50) null,
  170.     #se viene eliminato il ristorante, non e' necessario persistere gli ordini in db
  171.     foreign key (ristorante_id) references ristoranti(id) on update cascade on delete cascade,
  172.     #se il cliente cancella l'account, l'ordine rimarra' nel db
  173.     foreign key (cliente_email) references clienti(email) on update cascade on delete set null,
  174.     #se viene eliminata la persona che l'ha consegnato, l'ordine rimarra nel db
  175.     foreign key (persona_cf) references persone(cf) on update cascade on delete set null,
  176.     primary key (num_ordine, data_ordine, ristorante_id)
  177. );
RAW Paste Data