webForumDet fria alternativet

Databasstruktur på "I like" funktion

2 svar · 551 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

Jag tänkte smälla ihop en "jag gillar" funktion, typ facebook, mot ett antal moduler i min databas. Modulerna är ex. artiklar, nyheter, produkter i webbutik m.fl.

Fråga:
Är det helt idiotiskt att ha en gemensam tabell för detta ändamål?
Tabellen skulle kunna se ut:

LikeID        int               primary key
Module        int               ex. 1=artikel, 2=nyhet, 3=produkt
RelatedID     int               en typ av foreign key mot övriga tabeller
IP            varchar(20)       användarens ip nummer
UserAgent     varchar(MAX)      användarens useragent

Sen om man har en viss artikel så hämtar man med:

Select * from LikeTable Where Module = 1 And RelatedID = 123

Men på detta sätt tappar man helt relationen i databasen mellan tabellerna eftersom RelatedID går mot alla tabellerna.
Fördelen är ju om man har 30 moduler man vill ha funktionaliteten på så slipper man skapa 30 "I like"-tabeller.

Eller har ni nått smartare sätt?

nitro2k01Medlem sedan aug. 20039 342 inlägg
#2
  1. Om du har 30 olika tabeller modultabeller så är det väl ingen större förlust att ha 30 like-tabeller?
  2. Ett tips: Kräv att användaren är inloggad (och spara använndar-ID't). Annars är det nästan för inbjudande enkelt att peppra en produkt med "likes" frän olika proxy-servrar. Skilj åtminstone på inloggade och inte inloggade röster.
  3. Skippa ev. user-agent för att spara plats.
  4. Du kan spara rösterna som du har föreslagit, men skapa även en kolumn för antalet röster för snabb åtkomst. Vid behov, när någon har lagt till en ny röst, kör typ:
UPDATE modul m SET likes = COUNT(l.LikeID)
LEFT JOIN likes l ON l.RelatedID = m.modulid
WHERE m.modulid = $id

Fräga: Vilken databashanterare använder du?

doggelitoMedlem sedan juni 20003 076 inlägg
#3

Tack för tipsen! :bire
Jag använder ms sql 2008

148 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)