Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Creare una relazione forzata tra tabelle

    Supponiamo di avere una tabella utenti così strutturata

    utenti
    ID|Nome|Cognome|Abilitato

    dove la colonna "Abilitato" contiene un valore 0 o 1 a seconda se l'utente è attivo(1) o è stato bannato(0)

    Poi utilizzo una tabella separata per memorizzare tutte le informazioni relative al ban degli utenti

    utenti_bannati
    ID|Motivazione|Data del ban

    Da un punto di vista logico nel momento in cui vado a bannare un utente (utenti.Abilitato passa a 0), questo deve essere necessariamente memorizzato nella tabella utenti_bannati.
    Allo stesso modo, quando elimino un utente da utenti_bannati, la colonna utenti.Abilitato deve passare a 1

    Sono accorgimenti che devo necessariamente ricordarmi di prendere nel momento in cui creo lo script di query oppure posso creare una "relazione obbligatoria" tra la il campo e la tabella che se non viene rispettata lancia un errore?

  2. #2
    qualcosa (non tutto!) si può fare con dei trigger. ma andrebbe specificato per quale db (ricordi il regolamento ?)

  3. #3
    Se banni un utente e lo scrivi in apposita tabella deve rimanere scritoo a vita. Altrimenti la cancellazione rappresenterebbe il condono tombale....

    Aggiungerei un campo col il numero dei ban raggiunto. dopo il secondo "mortus es for ever"

    Per ripristinare l'utente rimetti 1 al posto dello zero.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da American Visualizza il messaggio
    .... quando elimino un utente da utenti_bannati, ....
    .... creo lo script di query ....
    .... "relazione obbligatoria" .... se non viene rispettata lancia un errore? ....
    io valuterei anche la 3° strada che non hai ancora citato.
    -- La prima è lo Script o Trigger
    -- La seconda è lo script o Trigger + qualcosa che ti lancia un errore


    la terza invece
    Nella tabella utenti elimini il campo "Abilitato"
    Nella tabella utenti_bannati aggiungi un campo di "RIAbilitato" ( Chiamiamolo RAB )
    Ti fai una vista fra la tabella utenti e utenti_bannati e escludi gli utenti che hanno un ban privo del RAB


    Mi sono spiegato male ma penso che si capisce


    certamente è più lento perche deve elaborare .....

    ma
    - non rischi di sbagliare
    - non hai script/trigger
    - ti resta storia dei vecchi ban anche se "perdonati" con RAB

    .
    Ultima modifica di nman; 12-11-2013 a 13:58

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Quote Originariamente inviata da nman Visualizza il messaggio
    io valuterei anche la 3° strada che non hai ancora citato.
    -- La prima è lo Script o Trigger
    -- La seconda è lo script o Trigger + qualcosa che ti lancia un errore


    la terza invece
    Nella tabella utenti elimini il campo "Abilitato"
    Nella tabella utenti_bannati aggiungi un campo di "RIAbilitato" ( Chiamiamolo RAB )
    Ti fai una vista fra la tabella utenti e utenti_bannati e escludi gli utenti che hanno un ban privo del RAB


    Mi sono spiegato male ma penso che si capisce


    certamente è più lento perche deve elaborare .....

    ma
    - non rischi di sbagliare
    - non hai script/trigger
    - ti resta storia dei vecchi ban anche se "perdonati" con RAB

    .
    Considera che utenti.Abilitato mi serve a prescindere perchè ci sono diversi stati che gli utenti possono assumere (ad esempio un utente che ha ancora in sospeso la verifica mail).

    Ad ogni modo non è questo il punto, perchè la storia del creare una colonna RAB in utenti_bannati mi pare un po' macchinosa inoltre inzozzo il database di informazioni che rischiano di diventare obsolete

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Quote Originariamente inviata da optime Visualizza il messaggio
    qualcosa (non tutto!) si può fare con dei trigger. ma andrebbe specificato per quale db (ricordi il regolamento ?)
    non mi fa modificare il messaggio, cmq il DB è Mysql

  7. #7
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da American Visualizza il messaggio
    .... mi pare un po' macchinosa inoltre inzozzo il database ...
    Mi scusi non intervengo più

    certo che io nei miei DB ho dei record vecchi di decenni ma li ritengo ancora puliti

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    scusa non volevo offenderti.. la considerazione era riferita a quelli che sono i miei scopi, magari in altre circostanze il tuo metodo risulta più organizzato.

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.