2012-04-05 3 views
0

Ich bin von SQL-Welt, also bitte, frag mich nicht, dass es keine Tabellen, Beziehungen usw. in NoSQL, ich weiß es, aber es ist schwierig für mich zu verstehen, wie ich Nachrichten in Kategorien ohne Beziehungen halten kann.Erstellen von gut gestalteten Datenbank für eine einfache Webapp mit NoSQL

Also, stellen Sie sich vor, dass wir in der Datenbank Nachrichten, Kategorien für Nachrichten, Tags, Benutzerprofile und Kommentare für Nachrichten von Benutzern behalten möchten. Mit SQL denke ich, dass diese Aufgabe mit Architektur wie diese gelöst werden können (schaut nicht auf Syntax, es ist Pseudo-Code):

categories (id, title) 
news (id, title, content, category_id) 
users (id, first_name, last_name, homepage_url) 
news_comments (id, news_id, user_id, comment) 
tags (id, title) 
news_tags (news_id, tag_id) 

Wie diese Aufgabe mit MongoDB/CouchDB/NoSQL gelöst werden? Ich interessiere mich für gute Architektur, ich muss nicht über etwas wie Indizes wissen.

+0

Sie müssen wahrscheinlich die Frage auf eine einzige Datenbank eingrenzen, Sie werden wahrscheinlich keine erschöpfende Antwort für jede Geschmacksrichtung von Nosql erhalten. – biziclop

Antwort

1

Im Allgemeinen müssen Sie Ihre Daten denormalisieren. Ihre "news" Rekord würde wie folgt aussehen:

news (id, title, content, category_title, [tags]) # that is list of tags 

oder technisch präziser, so etwas wie:

(id, type=news, title, content, category_title, [tags]) 

Sie durch "Fremdschlüssel" Filter kann so

mit
news_comments (id, news_id, user_id, comment) 

ist nicht ein großes Problem, wenn Sie Kommentare für bestimmte Nachrichten auswählen möchten, aber wenn Sie die first_name des Benutzers anzeigen möchten, möchten Sie diese Daten wahrscheinlich in den Kommentardatensatz selbst aufnehmen.

Was also, wenn der Benutzer nach dem Kommentieren seine Daten ändert?

  1. Sie nicht wirklich kümmern
  2. Sie verwenden falsche Werkzeug für einen Job

gibt es eine Option 3 Sie alle Kommentare finden und aktualisieren, aber wenn das häufig genug Fall ist, Sie Wahrscheinlich brauchen Sie zuerst eine relationale Datenbank.

Verwandte Themen