To bardzo proste - być może łatwiejsze niż się spodziewasz.
Podczas przechowywania elementu bloga, oczywiście zostanie wstawiony do tabeli głównych encji. Blog wygląda następująco:
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: ... }'
);
Dodaje się również osobną tabelę indeksu dla każdego logicznego typu atrybutu. Na przykładzie, identyfikator użytkownika bloga nie jest taki sam jak identyfikator użytkownika dla tweeta. Ponieważ właśnie włożona bloga, następnie wstawić do tabeli (-ach) indeks dla atrybutu (ów) blogu:
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');
nie wolno wkładać do tablic indeksowanych ćwierkać, ponieważ po prostu stworzyła blog, a nie tweet .
Znasz wszystkie wiersze w blogach referencyjnych blog_userid
, ponieważ tak je wstawiłeś. Więc można szukać blogów o danym użytkowniku:
SELECT e.*
FROM blog_userid u JOIN entities e ON u.id = e.id
WHERE u.userid = 86765309;
Re swój komentarz:
Tak, można dodać prawdziwe kolumny do tabeli podmiotom wszelkich atrybutów, które znasz zastosowanie do wszystkich treści typy. Na przykład:
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
);
Kolumny ENTITY_TYPE i CREATION_DATE pozwoli Ci czołgać podmiotów w kolejności chronologicznej (lub w odwrotnej kolejności chronologicznej) i wiem, który zestaw tabel indeksu pasuje do typu jednostki danego rzędu.
Możesz aby przejrzeć [bazy danych dokumentów] (http://en.wikipedia.org/wiki/Document-oriented_database). Pozwalają one na przechowywanie całych dokumentów, podobnie jak FriendFeed, ale baza danych zajmuje się indeksowaniem. –