Come rappresentare un record correlato speciale

1

Ho due tabelle, project e photo . photo ha ID , projectID , path : ogni project ha più photo s.

Ora uno di questi photo s è quello che deve essere visualizzato. La domanda è come rappresentarlo nel database.

In precedenza, ho utilizzato l'ordine decrescente di ID numeri e ho scelto l'ultimo, ma non è riuscito e ho causato problemi. Ora non sono sicuro su quale direzione andare:

  • Crea una nuova tabella projectPhotoDisplayed che contiene project . ID e photo . ID (quelli che devono essere visualizzati solo) numeri.
    Il male: troppo lavoro, oltre a replicare le informazioni che la tabella photo ha già ( photo s associata a project s).
  • Crea un nuovo campo binario nella tabella photo . Se è vero, quindi mostra, altrimenti no.
    Il male: Strutturalmente non impedisce la visualizzazione di più photo s. Voglio il comportamento del pulsante di scelta
  • Crea un nuovo campo nella tabella project che memorizza il photoID di photo da visualizzare.
    Il male: non garantisce che il particolare photoID sia effettivamente collegato a questo project . Anche questa informazione appartiene qui?
  • Qualsiasi approccio con chiavi esterne in modo tale da mantenere l'integrità referenziale ..?

Utilizzo del database InnoDB di PHP e MySQL, anche se sono sicuro che non avrà importanza.

Qual è il modo migliore per memorizzare queste informazioni?

    
posta Milind R 25.02.2014 - 08:30
fonte

1 risposta

2

Tutti e tre i modi sono soluzioni valide, ma eviterei il primo e il terzo a causa di informazioni ridondanti che potrebbero essere "fuori sincronia". Potrebbe esserci un ID foto memorizzato come chiave esterna di una foto che appartiene o è spostata su un progetto diverso.

Create a new binary field in the photo table.

Sicuramente intendevi un campo booleano , non un campo binario . Questa sarebbe la mia opzione preferita. Per assicurarsi che ci sia al massimo una foto da visualizzare, puoi aggiungere trigger "prima dell'aggiornamento" e "prima dell'inserimento" al tuo DB, contando il numero di righe in cui la colonna "display" ha il valore "true" e il lancio un errore se ce ne fosse più di uno. Qui trovi un esempio su come utilizzare i trigger "prima dell'inserimento" per verifica dei vincoli.

    
risposta data 25.02.2014 - 08:49
fonte

Leggi altre domande sui tag