Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156

    [mySQL] DB compagnia di linee aeree, query molti a molti

    salve, questo è l'esercizio su cui mi sono cimentato

    Disegnare ERD e codice SQL per la creazione di un DB riguardante una
    compagnia di linee aeree.
    Aggiungere ulteriori campi o tabelle se ritenuti necessari al completamento della struttura del database.
    Un viaggiatore puo' prenotare molti voli, un volo puo' accogliere molti viaggiatori.
    Creare:
    -Entità viaggiatore contenente almeno gli attributi nome e cognome
    -Entità volo contenente almeno gli attributi data, partenza, destinazione, ora di partenza e di arrivo.
    Scrivere il codice SQL per le seguenti query:
    -Dato un viaggiatore trovare tutti i voli
    -Trovare tutti i voli in una certa data
    -Dato un volo trovare tutti i viaggiatori

    per la parte di creazione del DB non ho riscontrato molte difficoltà, ma riporto il codice nel caso vogliate suggerirmi qualche miglioria o qualche correzione
    codice:
    CREATE TABLE viaggiatore
    (
    nome VARCHAR(30),
    cognome VARCHAR(30),
    ID INT
    );
    ALTER TABLE viaggiatore ADD PRIMARY KEY(ID);
    CREATE TABLE volo
    (
    datavolo DATE,
    orapart TIME,
    oraarr TIME,
    part VARCHAR(20),
    dest VARCHAR(20),
    CODE INT
    );
    ALTER TABLE volo ADD PRIMARY KEY(CODE);
    CREATE TABLE prenotazione
    (
    ID INT,
    CODE INT
    );
    ALTER TABLE prenotazione ADD PRIMARY KEY(ID,CODE);
    ALTER TABLE prenotazione ADD CONSTRAINT prenota FOREIGN KEY(ID) REFERENCES viaggiatore(ID);
    ALTER TABLE prenotazione ADD CONSTRAINT prenotato FOREIGN KEY(CODE) REFERENCES volo(CODE);
    per quanto riguarda le query ho l'impressione di non aver ancora ben capito come gestire le relazioni molti a molti, il risultato è questo (che,nonostante vada bene in questo caso, mi sembra un po' forzato)
    codice:
    dato un passeggero trovare tutti i voli
    SELECT datavolo,orapart,oraarr,part,dest FROM volo JOIN prenotazione ON prenotazione.CODE=volo.CODE
    WHERE prenotazione.ID=input;
    
    
    dato un volo trovare tutti i passeggeri
    SELECT nome,cognome FROM viaggiatore JOIN prenotazione ON prenotazione.ID=viaggiatore.ID WHERE prenotazione.CODE=input;


    ora, tralasciando gli "input" che ho indicato così perchè suppongo che l'unico modo per avere valori precisi siano funzioni come (in php) mysql_query('etc...'.$ID), ho l'impressione che il codice sia troppo poco versatile e che ci siano alternative più complete alle query che ho scritto.
    (c'è da dire che le uniche query previste nel programma del corso sono SELECT FROM e JOIN ON, ma vorrei approfondire la questione)
    ringrazio in anticipo

  2. #2
    Che vuol dire "troppo poco versatile"?

  3. #3
    e poi, un po' di "educazione" come farai anche solo tra due settimane a ricordarti che ID è la chiave del viaggiatore e CODE è la chiave del volo? chiamali piuttosto ViaggiatoreId e VoloId: è più chiaro, non ti pare? Ragiona allo stesso modo per tutti gli altri nomi di colonna

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Questo è sicuramente vero, i nomi andrebbero modificati; riguardo la logica del SELECT va bene così?
    in genere per questi esempi così semplici posso usare la forma
    codice:
    SELECT campi FROM tabella1 JOIN tabella_associativa 
    ON tabella1.chiave_primaria=tabella_associativa.chiave_esterna1 
    WHERE tabella_associativa.chiave_esterna2=valore_desiderato;
    ?

  5. #5
    non capisco la domanda: ti danno fastidio le cose semplici?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    quelle potenzialmente sbagliate si, per questo la domanda. Siccome è un campo dell'informatica nel quale sono entrato da pochi giorni cerco di fugare ogni dubbio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.