Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [MySQL] Consigli progettazione Database

    Salve a tutti. Sto progettando un semplice database e mi piacerebbe avere una vostra opinione in
    merito (almeno sapere se è corretto).

    Descrizione:

    - Ho un insieme di stanze (non posso avere due stanze con lo stesso nome).
    - Ogni stanza ha un set di azioni (no due azioni con lo stesso nome dentro la stessa stanza).
    - Poi ho una classica tabella che salva gli utenti (per login e registrazione).
    - Un utente può effettuare delle azioni in un certo momento (non due contemporaneamente)

    Interagisco con il database tramite app Android, e le operazioni che devo fare sono:

    - login/registrazione utente
    - inserimento/cancellazione di una stanza
    - data una stanza, inserisci/cancella un azione
    - ottenere tutte le stanze
    - data una stanza dammi tutte le sue azioni
    - inserimento azione

    Questo è il codice SQL che ho generato:

    codice:
    CREATE TABLE `room` (
      `value` VARCHAR(255) PRIMARY KEY
    );
    
    
    CREATE TABLE `room_actions` (
      `id` INTEGER PRIMARY KEY AUTO_INCREMENT,
      `action_name` VARCHAR(255) NOT NULL,
      `room` VARCHAR(255) NOT NULL
    );
    
    
    CREATE INDEX `idx_room_actions__room` ON `room_actions` (`room`);
    
    
    ALTER TABLE `room_actions` ADD CONSTRAINT `fk_room_actions__room` FOREIGN KEY (`room`) REFERENCES `room` (`value`);
    
    
    CREATE TABLE `users` (
      `id` INTEGER PRIMARY KEY AUTO_INCREMENT,
      `name` VARCHAR(255) NOT NULL,
      `email` VARCHAR(255) UNIQUE NOT NULL,
      `password` VARCHAR(255) NOT NULL
    );
    
    
    CREATE TABLE `users_actions` (
      `id` INTEGER PRIMARY KEY AUTO_INCREMENT,
      `timestamp` DATETIME UNIQUE NOT NULL,
      `users` INTEGER NOT NULL,
      `room__actions` INTEGER NOT NULL
    );
    
    
    CREATE INDEX `idx_users_actions__room__actions` ON `users_actions` (`room__actions`);
    
    
    CREATE INDEX `idx_users_actions__users` ON `users_actions` (`users`);
    
    
    ALTER TABLE `users_actions` ADD CONSTRAINT `fk_users_actions__room__actions` FOREIGN KEY (`room__actions`) REFERENCES `room_actions` (`id`);
    
    
    ALTER TABLE `users_actions` ADD CONSTRAINT `fk_users_actions__users` FOREIGN KEY (`users`) REFERENCES `users` (`id`)
    Considerando che mi servirà una funzione che mi ritorna tutte le azioni in un formato
    leggibile, tipo:

    Javino89 | Cucina | Mangiato | Timestamp
    Javino89 | Bagno | Wc | Timestamp
    Andrea | Bagno | Wc | Timestamp
    ...

    Grazie del supporto

  2. #2
    Direi che va bene.

  3. #3
    Per ottenere quel risultato leggibile alla fine sono costretto a fare delle select per ogni riga della tabella "users_actions". E' un procedimento normale?

    PS: inoltre, per fare in modo di non avere due azioni uguali per la stessa stanza, teoricamente dovrei
    creare una chiave primaria composta per la tabella "room_actions": (action_name, room), ma non so se è
    necessario.

    Farei il check lato client e lato server non potrei mai avere una situazione del genere.
    Ultima modifica di Javino89; 24-08-2016 a 18:55

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.