Sono un pazzo.
Sto cercando di creare un social network partendo da zero.
Il codice è base e non ci sono algoritmi o cavolate varie.
Vorrei chiedervi un consiglio per strutturare la gestione della privacy dei vari post pubblicati dagli utenti.
Ancora non ho iniziato la programmazione, quindi posso cambiare qualsiasi cosa.
Iniziamo dal sistema delle amicizie. C'è una tabella con un elenco degli ID degli utenti che aggiungono agli amici altri utenti. Quindi avremo: ID (ID dell'amicizia) | IDUtente1 (colui che aggiunge) | IDUtente2 (colui che viene aggiunto).
Il sistema è come Google+, quindi se Utente1 aggiunge Utente2 agli amici, allora Utente2 potrà visualizzare i post di Utente1 senza doverlo per forza aggiungere agli amici.
Passiamo alla pubblicazione dei post. Una colonna registrerà il valore di "Privacy": 1=privato, 2=pubblico.
Se il post è pubblico, potrà visualizzarlo chiunque. Se è privato, potrà visualizzarlo soltanto chi è stato aggiunto agli amici. Nel caso di prima, se Utente1 pubblica un post privato, Utente2 potrà visualizzarlo perché è stato aggiunto agli amici. Viceversa, dato che Utente1 non è stato aggiunto da Utente2, non potrà visualizzare i post pubblicati da Utente2.
Vorrei creare una pagina contenente tutti gli ultimi post di tutti gli amici (come la sezione "Notizie" di Facebook).
Non ho idea di come fare. Ma soprattutto, sperando che questo social network diventi abbastanza utilizzato, vorrei che fosse sempre "veloce" ad eseguire le query, considerando che ci saranno moltissime righe in ogni tabella.
Avevo pensato a qualcosa del tipo: "SELECT * FROM Post WHERE Privacy = 2 OR (Privacy = 1 AND UtenteAttuale = Amicizie.IDUtente2)". Funzione che ovviamente non esiste e che non so come scrivere. Praticamente seleziono tutti i post dove la privacy è uguale a 2 (poiché pubblica), ma anche i post dove la privacy è uguale a 1 (privata), considerando che l'ID dell'utente attuale (UtenteAttuale) dev'essere nella stessa riga dove IDUtente1 è uguale all'utente che ha pubblicato il post.
Non sono stato chiarissimo, ma spero che mi capiate.
Penso che comunque la query non dovrebbe essere un problema.
Quello che mi preoccupa è il rallentamento nel caricamento delle pagine, ma vedremo...
Grazie mille