Più tabelle con lo stesso nome, ma ognuna con un ID univoco per distinguerle?

2

Sto provando a codificare un gioco di dadi in cui gli utenti accedono e si sfidano a vicenda. Ho già realizzato una versione di questo gioco senza effettuare il login, ma è possibile riprodurre solo una partita alla volta.

Così ora, ci sarà la possibilità di diversi giochi in corso contemporaneamente tra gli utenti.

Nella versione non di login avevo bisogno di 4 tavoli per ogni partita, uno per i nomi dei giocatori, uno per i punteggi precedenti di ciascun giocatore e uno per memorizzare i tiri attuali. Vengono aggiornati automaticamente e cancellati man mano che il gioco procede.

La mia idea per la versione di login è di dare a ogni gioco un id, quindi il primo gioco che è inizializzato sarà game1, il secondo, game2 ecc. e per ogni gioco genererà le stesse 4 tabelle. In ogni gioco avranno lo stesso nome (player1_subtotal, player2_subtotal per esempio) ma nel gioco 1, ogni tavolo avrà un game_id che lo identifica come appartenente al gioco 1, e allo stesso modo per il gioco 2 ecc.

Giusto per ribadire, questo significherebbe che ci sarebbero diverse tabelle con lo stesso nome, ma ognuna con un diverso game_id. E ci sarebbero diverse tabelle con nomi diversi, ma legate insieme tramite lo stesso game_id.

È possibile o sto andando in questo modo nel modo sbagliato? Sto solo usando PHP e MySQL per questo e non ho imparato nessun'altra lingua oltre a Javascript e un po 'di Java.

Grazie

    
posta user122374 20.10.2016 - 11:22
fonte

2 risposte

1

A mio parere, sembra che il modello di dati sia errato. Raramente è una buona idea creare tabelle temporanee (IMO).

Dovresti essere in grado di impostare le cose in modo che tu abbia qualcosa come le seguenti tabelle:

  • Giocatori con Player_ID come pk e qualsiasi cosa specifica al giocatore, ad es. indirizzo email.
  • Giochi con Game_ID come pk e qualsiasi cosa specifica per il gioco, ad es. data giocata
  • Game_Players con Game_Id e Player_ID come chiave unica (ci saranno due righe per partita completata, una per ciascun giocatore) e il punteggio totale dei giocatori per quel gioco ecc.
  • Current_Games con Game_ID Player_ID e Turn_No come chiave Univoca e informazioni sul turno dei giocatori, ovvero il punteggio

Quindi per iniziare un gioco generi un nuovo Game_ID probabilmente inserendo una riga in Giochi (supponendo che tu abbia usato un campo autoincrementing per il Game_ID - suggerimento, dovresti), Due file in Game_Players e poi continua a inserire i turni la tabella Current_Games. Se continui a filtrare su Game_ID la tabella contiene solo le righe relative al gioco corrente. Una volta completato il gioco, aggiorni i Game_Players con i punteggi finali ed elimina da Current_games dove game_ID = ... per cancellare il gioco corrente, se ciò si rivela necessario. Potresti trovare desiderabile tenere una registrazione completa di ogni gioco e eliminare i vecchi giochi solo quando lo spazio diventa un problema.

    
risposta data 20.10.2016 - 11:47
fonte
0

Non sono sicuro di seguirlo, ma stai suggerendo di creare un nuovo set di tabelle per ogni nuovo gioco? Se è così, questa è probabilmente una cattiva idea per una serie di motivi, ad es.

  • una tabella ha una quantità minima di spazio che usa
  • le tabelle richiedono tempo per creare
  • il tuo database diventerà probabilmente lento man mano che vengono create più tabelle e si esaurisce lo spazio

Il modo in cui progetterei questo è usare un id di gioco come chiave per il gioco e ogni tabella avrà un numero di righe, quindi selezioni le righe che ti servono

per es.

Giocatore [player_id, player_name, dettagli giocatore ...]

Gioco [game_id, player_1, player_2, results ...]

    
risposta data 20.10.2016 - 11:31
fonte

Leggi altre domande sui tag