Esempi di progettazione di un database che gestisce il rilevamento dei punti?

1

Sto tentando di ampliare le mie conoscenze su come funzionano i progetti e i concetti di database. Sto lavorando a un'app per web / mobile per hobby che mi sfiderà. Tuttavia, sto riscontrando un problema.

Il mio nuovo concetto è che ci sono due pulsanti "sì" e "no".

È possibile fare clic sui pulsanti solo una volta al giorno.

Se si fa clic su "sì", un contatore tiene traccia del numero di clic (giorni) in cui è stato premuto. Esempio "Hai legato le scarpe per 95 giorni di seguito!"

Se si fa clic su "no", il contatore "resetta", ad esempio "Sono passati 0 giorni da quando hai legato la scarpa".

Ho letto qualche cosa ma non sono riuscito a trovare troppi esempi simili a questo. Ho letto diversi post qui (un esempio di questi sotto) ( implementazione del gestore di query dinamico sui dati storici

Memorizzazione di punti stop / start in un database

In un questionario online, qual è il modo migliore per progettare un database per tenere traccia degli utenti tutti i tentativi? )

ma sono ancora abbastanza confuso su come andare avanti. La mia idea iniziale era di avere un

tabella utente (id | utente | password)

tabella dei punti (id | point | date)

Se una persona fa clic su Sì, aggiunge una voce alla tabella punti. Se non fanno clic su nulla, non si verifica alcuna voce. Se fanno clic su no è un -1.

Tuttavia, non sono sicuro che questo sia un modo solido per costruire il database, specialmente se voglio seguirlo.

Le mie domande sono:

  1. Viste le poche attività precedenti, come configurare il database?

  2. Come potrei essere in grado di visualizzare un contatore che una volta che qualcuno non ha premuto "ripristina"? Ad esempio, il database tiene traccia del fatto che l'individuo ha legato le scarpe per gli ultimi 9 giorni consecutivi, ma una volta che hanno risposto no, non ha legato le scarpe, il contatore si azzera a 0.

  3. Come procedere con il lato analisi, per mostrare quante volte hanno fatto clic su no, sì, così via, ma è lungo la strada.

posta Cody Higdem 21.03.2014 - 13:49
fonte

2 risposte

1

In primo luogo, ogni volta che un utente è coinvolto, c'è almeno uno stato aggiuntivo coinvolto: cosa succede se l'utente non interagisce o non usa la tua app in un dato giorno?

Questo è importante perché porta a una varietà di casi, ad es.

  • Se un utente fa clic su Sì di sabato, accede domenica ma non fa clic su sì o no, che cosa vuoi mostrare all'utente?
  • Se un utente fa clic su Sì di sabato, non effettua l'accesso di domenica e fa clic su Sì di lunedì, che cosa desideri mostrare all'utente? Quel 3 giorni, 2 giorni o solo 1 giorno di fila?
  • Se un utente fa clic su no il sabato, non effettua l'accesso di domenica e fa clic su Sì il lunedì, è di 2 giorni o solo 1 giorno di fila?

Dato che le risposte a questi non sono note, potrebbero essere presi in considerazione altri casi. Il modello DB usuall dipende da quale sarà il comportamento completo (cioè i requisiti).

Per la progettazione più flessibile, vorrei creare la tabella dei punti con le seguenti colonne:

UserId: acts as a foreign key for the id field in the user table
DateOfLastEntry: The date on which the user last clicked anything (regardless of yes or no)
NumberOfConsecutiveYes: number

Quindi codifica i seguenti casi:

  1. La voce per l'utente viene creata il giorno in cui l'utente fa prima clic su sì o no
  2. Per ogni clic, confronta DateOfLastEntry con la data di oggi. Se la data corrisponde, ignora il clic dell'utente
  3. Se DateOfLastEntry è ieri: I) Se l'utente ha fatto clic su Sì, aggiungi 1 a NumberOfConsecutiveYes, aggiorna DateOfLastEntry a oggi. II) Se l'utente ha fatto clic su No, imposta NumberOfConsecutiveYes su 0 e aggiorna DateOfLastEntry a oggi.
  4. Per l'altro ieri, usa il caso 3 o aggiungi la logica per qualsiasi caso tu voglia aggiungere.
risposta data 22.06.2014 - 07:24
fonte
0

Se ho capito bene, hai 3 distinti bit di informazione: utente, data, stato (sì / no)

Quindi crea una tabella con quei campi (più una chiave primaria univoca).

Puoi quindi eseguire una query su questa tabella per trovare quanti yes ci sono stati in una riga, se mostrare i pulsanti per il giorno corrente, sì al mese ecc.

    
risposta data 24.03.2014 - 04:10
fonte

Leggi altre domande sui tag