Sto cercando di determinare la migliore progettazione di tabella per una funzione "segui/non seguire", simile a Twitter (modifica: Non sto creando un'applicazione simile a Twitter.) Di seguito è riportato il mio attuale design del tavolo e la gestione dei php. Non sono sicuro che sia l'approccio migliore e apprezzerebbe davvero il tuo feedback.Design tabella database "Segui utente"
CREATE TABLE IF NOT EXISTS `user_follow` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`follower` int(11) NOT NULL,
`following` int(11) NOT NULL,
`subscribed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `follow_unique` (`follower`,`following`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;
In seguito, la seguono id è aggiunto al campo follower
e l'ID dell'utente che sarà seguito viene aggiunto following
. Sto anche registrando la data in cui un utente si è iscritto per seguire un altro utente nel campo subscribed
. La data dell'abbonamento potrebbe essere utilizzata per l'ordinamento.
Quando un utente non esegue la cancellazione, è sufficiente eliminare la riga corrispondente.
Per evitare righe duplicate ho creato le colonne follower
e following
univoche. Se un utente è già a seguito di un id e scatta a seguire ancora una volta, ottengo l'errore di database 1062. Per esempio
voce duplicata '62 -88' per la chiave 'follow_unique'
Ovviamente quando già dopo un utente, il follower vede un pulsante unfollow
. Ciò si ottiene controllando se esiste una riga di tabella che segue un seguace tra 2 utenti. Se rows > 0
visualizzo unfollow
altrimenti follow
.
Bene, cosa ne pensi?
Non sto tentando di ricreare Twitter .. È per uno scopo completamente diverso ma ha le stesse funzionalità di Twitter in termini di abbonamenti – CyberJunkie
Suona bene, ma vorrei aggiungere (se non lo hai già) vincoli Foreign Keys su 'follower' e' following' sulla tabella Utenti. – Dirk
Quello che stai facendo sembra a mio parere. Ti suggerirei di usare 'ENGINE = InnoDB' piuttosto che' MyISAM', quindi puoi applicare le relazioni 'FOREIGN KEY' e' ON DELETE/UPDATE'. È probabile che ciò richieda tuttavia che le modifiche al motore di molte delle tue tabelle siano efficaci. –