Es ist sehr einfach - vielleicht einfacher als Sie erwarten.
Wenn Sie eine Blog-Entität speichern, fügen Sie sie natürlich in die Tabelle der Haupteinheiten ein. Ein Blog geht so:
CREATE TABLE entities (
id INT AUTO_INCREMENT PRIMARY KEY,
entity_json TEXT NOT NULL
);
INSERT INTO entities (id, entity_json) VALUES (DEFAULT,
'{userid: 8675309,
post_date: "2010-07-27",
title: "MySQL is NoSQL",
body: ... }'
);
Sie fügen auch in eine separate Indextabelle für jeden logischen Typ des Attributs ein. In Ihrem Beispiel ist die Benutzer-ID für ein Blog nicht identisch mit einer Benutzer-ID für einen Tweet. Da Sie nur ein Blog eingefügt, legen Sie dann in Indextabelle (e) für Blog-Attribut (e):
CREATE TABLE blog_userid (
id INT NOT NULL PRIMARY KEY,
userid BIGINT UNSIGNED,
KEY (userid, id)
);
INSERT INTO blog_userid (id, userid) VALUES (LAST_INSERT_ID(), 8675309);
CREATE TABLE blog_date (
id INT NOT NULL PRIMARY KEY,
post_date DATETIME UNSIGNED,
KEY (post_date, id)
);
INSERT INTO blog_date (id, post_date) VALUES (LAST_INSERT_ID(), '2010-07-27');
nicht in irgendwelche tweet Index-Tabellen einfügen Sie, weil Sie nur ein Blog erstellt, nicht ein Tweet .
Sie kennen alle Zeilen in blog_userid
Referenz-Blogs, denn so haben Sie sie eingefügt. So können Sie für Blogs von einem bestimmten Benutzer suchen:
SELECT e.*
FROM blog_userid u JOIN entities e ON u.id = e.id
WHERE u.userid = 86765309;
Re Ihr Kommentar:
Ja, könnten Sie echte Spalten an den Einheiten Tabelle hinzufügen für alle Attribute, die Sie auf alle Inhalte anwenden kennen Arten. Zum Beispiel:
CREATE TABLE entities (
id INT AUTO_INCREMENT PRIMARY KEY,
entity_type INT NOT NULL,
creation_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
entity_json TEXT NOT NULL
);
Die Spalten für ENTITY_TYPE und creation_date Sie erlauben würde, die Entitäten in chronologischer Reihenfolge (oder umgekehrt chronologische Reihenfolge) und wissen, welche Gruppe von Indextabellen entsprechen den Entitätstyp einer bestimmte Zeile zu kriechen.
Sie möchten auf [Dokumentendatenbanken] (http://en.wikipedia.org/wiki/Document-oriented_database). Diese erlauben es Ihnen, auch ganze Dokumente zu speichern, genau wie FriendFeed, aber die Datenbank kümmert sich um die gesamte Indizierung für Sie. –