Design della tabella delle notifiche?

4

Sto provando a creare un sistema di notifica per il mio social network. Ma sono bloccato sul design del database. quindi, quando un utente commenta un altro utente, desidero visualizzare "X commentato sul tuo post". o quando qualcuno ne segue un altro voglio mostrare una notifica.

Questa è la mia tabella finora:

CREATE TABLE IF NOT EXISTS 'notifications' (
  'id' int(11) NOT NULL AUTO_INCREMENT,
  'user_id' int(11) NOT NULL,
  'notification_id' int(11) NOT NULL,
  'text' text NOT NULL,
  'read' int(11) NOT NULL,
  'created_at' datetime NOT NULL,
  'updated_at' datetime NOT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

La parte in cui sono confuso è, dovrei inserire un record quando qualcuno segue un'altra persona? Come ... Subito dopo che qualcuno fa clic sul pulsante? In tal caso, cosa devo inserire nella riga?

    
posta Akar 03.04.2015 - 19:58
fonte

2 risposte

5

Progetta il tuo database intorno ai dati. Quello che intendo con questo è:

  • Hai utenti
  • Hai post
  • Hai commenti
  • Hai utenti che stai seguendo
  • Hai notifiche

Sembra che tu stia cercando di progettare il tuo database attorno a un caso d'uso piuttosto che organizzare meglio i tuoi dati.

Prova qualcosa del tipo:

CREATE TABLE Users(
   id int not null auto_increment,
   name string not null
)

CREATE TABLE Posts(
   id int not null auto_increment,
   userID int foreign key Users(id),
   text string,
   whenPosted datetime default getDate()
)

CREATE TABLE Comments(
   id int not null auto_increment,
   userID int foreign key Users(id),
   postID int foreign key Posts(id),
   text string
)

CREATE TABLE Followers(
   userID int foreign key Users(id),
   followedUserID int foreign key Users(id)
)


CREATE TABLE Notifications(
   id int not null auto_increment,
   generated date default getDate(),
   text string //and other meta-data
   isRead bit not null default 0
)

so when a user comments on another user I want to display "X commented on your post."

Quando generi un commento, puoi immediatamente inserire una notifica nella tabella delle notifiche (questo è semplice).

Should I insert a record when someone follows another person? Like... Right after when someone clicks follow button? If so, What should I insert to the row?

Ora, dato che hai una tabella Followers puoi aggiungerli a quella tabella facendo clic su quel pulsante.

Quindi puoi fare:

  1. Controlla quando invii un post in futuro aggiungi una nuova notifica (e ignora tutti i post precedenti)
  2. Crea immediatamente una notifica per tutti i post dopo un determinato periodo

Raccomando la prima opzione, secondo me "follow" implica "segui tutti i nuovi contenuti".

    
risposta data 03.04.2015 - 21:43
fonte
0

Un modo per farlo: Crea una nuova tabella, assegna un nome simile a: follower con composite primary key e fai riferimento alle chiavi esterne alla tabella 'Notifications" Qualcosa come:

CREATE TABLE Follower (
  userid integer,
  Followeruserid integer,
  primary key (userid, Followeruserid)
);
    
risposta data 03.04.2015 - 21:19
fonte

Leggi altre domande sui tag