Hello zusammen,
ich möchte eine kleine Social Media Plattform (absolutes max. 10-20k Nutzer, eher 5k-10k) für ein Nischenprodukt aufbauen (also fernab von Größen wie Instagram und co :D), welches ich dann mit einer C# WPF Anwendung verwalten möchte (Nutzer sind dann per Web oder App eingebunden).
Die Frage ist für mich nun wie man sinnvoll ein Tabellen-Schema aufbaut, dass skallierbar bleibt und einigermaßen einfach für einen Feed abzufragen ist.
Sagen wir, es gibt folgende Entitäten die abgebildet werden:
Event
Food (Bilder sollen möglich sein, ist aber ein anderes Thema)
User
Damit sollen folgende Aktivitäten passieren können:
Like
Comment
Rate
Follow
Share
1. Möglichkeit
Daraus ergeben sich erstmal folgende Aktivitäten-Tabellen:
CommentEvent, id, comment, date, fkUser, fkEvent
CommentFood id, comment, date, fkUser, fkFood
LikeFood id, date, fkUser, fkFood
LikeEvent id, date, fkUser, fkEvent
RateFood id, rating, date, fkUser, fkFood
RateEvent id, rating, date, fkUser, fkFood
FollowUser id, date, fkUserFollower, fkUserFollowed
ShareFood id, date, comment, fkFood, fkUser
ShareEvent id, date, comment, fkEvent, fkUser
Könnte man machen. Einen User Feed könnte man mit einer Union Abfrage nach Datum sortiert erstellen.
2. Möglichkeit
Allerdings könnte man das System auch etwas vereinfachen und folgende Tabellen mit einem objectType machen:
Like id, date, fkUser, fkObject, objectType
Comment id, comment, date, fkUser, fkObject, objectType
Rate id, rating date, fkUser, fkFood
Follow id, date fkUserFollower, fkUserFollowed
Share id, date, comment, fkObject, objectType, fkUser
So spart man sich ein paar Tabellen. Allerdings hab ich dann keinen echten Foreignkey mehr.
3. Möglichkeit
Man schreibt alles in eine Tabelle:
UserActivity id, fromUser, toUser, content, rating, type, objectType, fkObject
Was wäre sinnvoller? Oder ganz anders?
Vielen Dank!
ich möchte eine kleine Social Media Plattform (absolutes max. 10-20k Nutzer, eher 5k-10k) für ein Nischenprodukt aufbauen (also fernab von Größen wie Instagram und co :D), welches ich dann mit einer C# WPF Anwendung verwalten möchte (Nutzer sind dann per Web oder App eingebunden).
Die Frage ist für mich nun wie man sinnvoll ein Tabellen-Schema aufbaut, dass skallierbar bleibt und einigermaßen einfach für einen Feed abzufragen ist.
Sagen wir, es gibt folgende Entitäten die abgebildet werden:
Event
Food (Bilder sollen möglich sein, ist aber ein anderes Thema)
User
Damit sollen folgende Aktivitäten passieren können:
Like
Comment
Rate
Follow
Share
1. Möglichkeit
Daraus ergeben sich erstmal folgende Aktivitäten-Tabellen:
CommentEvent, id, comment, date, fkUser, fkEvent
CommentFood id, comment, date, fkUser, fkFood
LikeFood id, date, fkUser, fkFood
LikeEvent id, date, fkUser, fkEvent
RateFood id, rating, date, fkUser, fkFood
RateEvent id, rating, date, fkUser, fkFood
FollowUser id, date, fkUserFollower, fkUserFollowed
ShareFood id, date, comment, fkFood, fkUser
ShareEvent id, date, comment, fkEvent, fkUser
Könnte man machen. Einen User Feed könnte man mit einer Union Abfrage nach Datum sortiert erstellen.
2. Möglichkeit
Allerdings könnte man das System auch etwas vereinfachen und folgende Tabellen mit einem objectType machen:
Like id, date, fkUser, fkObject, objectType
Comment id, comment, date, fkUser, fkObject, objectType
Rate id, rating date, fkUser, fkFood
Follow id, date fkUserFollower, fkUserFollowed
Share id, date, comment, fkObject, objectType, fkUser
So spart man sich ein paar Tabellen. Allerdings hab ich dann keinen echten Foreignkey mehr.
3. Möglichkeit
Man schreibt alles in eine Tabelle:
UserActivity id, fromUser, toUser, content, rating, type, objectType, fkObject
Was wäre sinnvoller? Oder ganz anders?
Vielen Dank!
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „asuryan“ ()