Sistema di prenotazione di tavoli in un ristorante

di il
5 risposte

Sistema di prenotazione di tavoli in un ristorante

Devo creare un sistema di prenotazione di tavoli in un ristorante.

Come impostereste le varie tabelle su mySql?

5 Risposte

  • Re: Sistema di prenotazione di tavoli in un ristorante

    Cosa ti interessa tracciare esattamente e soprattutto mostra tu un primo approccio di progettazione. In base al regolamento del forum non possiamo fornire "pappa pronta".
  • Re: Sistema di prenotazione di tavoli in un ristorante

    QUESTO è IL DATABASE CHE HO CREATO SU MYSQL:

    create database restaurant;

    use restaurant;

    create table tables(
    id_table int primary key auto_increment,
    seats_n int not null,
    seats_available int not null
    );

    create table users(
    username varchar(15) primary key,
    password varchar(15) not null,
    full_name varchar(50) not null,
    telephone varchar(30) not null,
    email varchar(30) not null
    );

    create table reservations(
    reservation_id int auto_increment primary key,
    client_id varchar(3) not null,
    table_ int not null,
    reservation_date timestamp not null,
    foreign key(client_id) references users(username),
    foreign key(table_) references tables(id_table)
    );

    create table environment( #Struttura del ristorante
    id_restaurant int primary key,
    capacity int not null check (capacity>0),
    telephone_restaurant varchar(30) not null
    );

    PROBLEMI:

    1)SU ECLIPSE NON SO COME USARE LA TABELLA ENVIRONMENT E COME COLLEGARLA.

    2)LA REGISTRAZIONE VA A BUON FINE, MA UNA VOLTA CHE EFFETTUO IL LOGIN, HO ERRORE 500 E NON RIESCO A VEDERE I TAVOLI PRENOTATI DALL'UTENTE (esattamente l'ArrayList <Table> che ho usato per inserire i tavoli prenotati, tramite il metodo "getReservedTables(String username)", risulta vuoto). Di seguito riporto il codice scritto nella classe DbConnection:

    package db;


    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;

    import model.User;
    import model.Table;


    public class DbConnection {

    private String url = "jdbc:mysql://localhost:3306/restaurant?serverTimezone=UTC";
    private String user = "root";
    private String pass = "ciao";

    private Connection conn;

    public DbConnection() throws SQLException {

    conn = DriverManager.getConnection(url, user, pass);

    }

    public void insertUser(String username, String password, String fullName, String telephone, String email) throws SQLException {
    String insert = "insert into users values(?,?,?,?,?)";

    PreparedStatement ps = conn.prepareStatement(insert);

    ps.setString(1, username);
    ps.setString(2, password);
    ps.setString(3, fullName);
    ps.setString(4, telephone);
    ps.setString(5, email);

    ps.executeUpdate();

    public User getUser(String username) throws SQLException {
    String select = "select * from users where username = ?"; //Creiamo una select parametrizzata in cui estraiamo tutti i dati di un utente che ha una determinata username

    PreparedStatement ps = conn.prepareStatement(select); //preparedStetemnt lo si prende da connessione e gli diamo come ingresso SELECT
    ps.setString(1, username);

    ResultSet rs = ps.executeQuery();


    User user = null;

    while(rs.next()) { //Se c'è un risultato, utenza verrà creato
    user = new User();

    user.setUsername(rs.getString("username")); //Setto username prendendo l'username dal db
    user.setPassword(rs.getString("password")); //Nel password dell'utenza metteremo il valore del record estratto corrispondente al campo password
    user.setFullName(rs.getString("full_name")); //Setto fullnome prendendo il nome dal db
    user.setTelephone(rs.getString("telephone"));
    user.setEmail(rs.getString("email"));
    }
    return user;
    }

    public ArrayList<Table> getReservedTables(String username) throws SQLException{

    String query = " select * from reservations r, tables t where r.table_=t.id_table and user=?";

    PreparedStatement ps = conn.prepareStatement(query);
    ps.setString(1, username);

    ResultSet rs = ps.executeQuery();

    ArrayList<Table> tablesList = new ArrayList<Table>();

    while(rs.next()) {
    Table table = new Table();
    table.setIdTable(rs.getInt("id_table"));
    table.setSeatsN(rs.getInt("seats_n"));
    table.setSeatsAvailable(rs.getInt("seats_available"));

    tablesList.add(table);

    }
    return tablesList;
    }
  • Re: Sistema di prenotazione di tavoli in un ristorante

    Ciao,
    1. ho spostato nella sezione mysql
    2. il codice va formattato per renderlo meglio leggibile. Seleziona le parti e formattale col tag code - pulsante </>
    3. hai 2 questioni: struttura database e interazione da Java. Sono due problemi differenti da porre in due aree differenti del forum: mysql e Java.

    In questo thread potrai farti aiutare per la parte mysql. Potresti di fatti cancellare la parte Java.
    La struttura del database è da migliorare ma dovresti spiegare meglio quale flusso dovrebbe supportare.
    Iniziamo dalle banalità. Il campo password non può essere un varchar (15). Lì ci deve stare l'hash della password che richiederà molti più caratteri.
    Campo username ed email. Se la email è sempre presente e univoca nella tabella utenti, potresti usarla come username.
    Applica un minimo di naming convention:
    Vedo dei campi con "id". Scegli se indicarlo come suffisso o prefisso. Dopo di che mantieni la convenzione.
    Vedo un campo che finisce con underscore.
    Vedo il campo client_id fk di username
  • Re: Sistema di prenotazione di tavoli in un ristorante

    Beh diciamo che già dall'incipit [CODe] create table tables( id_table int primary key auto_increment, si vede un approccio che diciamo non è quello che consiglierei.
    Chiavi autoincrementanti del tutto inutili se non dannose (inutili per un sistema così piccolo, dannose per la manutenzione).
    Una chiave primaria autoincrementante (ser) ci va sempre (tra l'altro se non la metti... ne mette una nascosta mysql se usi innodb o cugini vari).
    Ma lo scopo è quello di avere un "cursore", non una chiave.

    Per queste ti consiglio recisamente di creare le TUE chiavi
  • Re: Sistema di prenotazione di tavoli in un ristorante

    Aggiungo a quanto già detto:
    1) Perché tenere un campo per i posti disponibili? Non ha molto senso... Quel dato varia in base al pranzo/cena che uno vuole analizzare.
    2) Perché in "reservation" crei una FK tra [client_id varchar(3)] e [username varchar(15)]? Sono di dimensioni diverse, come fai a far stare un varchar(15) in un varchar(3)?
    3) A cosa serve la tabella "environment" se poi non è associata da nessuna parte?
Devi accedere o registrarti per scrivere nel forum
5 risposte