Es muy simple, quizás más simple de lo que esperaba.
Cuando almacena una entidad de blog, se va a insertar en la tabla de entidades principales, por supuesto. Un blog es la siguiente:
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: ... }'
);
También inserción en una tabla índice separado para cada tipo de atributo lógico. Usando su ejemplo, el ID de usuario para un blog no es lo mismo que un ID de usuario para un tweet. Dado que acaba de insertar un blog, a continuación, inserta en la tabla (s) de índice para el blog atributo (s):
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');
No inserte en las tablas de índice pío, ya que acaba de crear un blog, no un tweet .
Conoce todas las filas en los blogs de referencia blog_userid
, porque así es como las insertó. Así que usted puede buscar blogs de un usuario determinado:
SELECT e.*
FROM blog_userid u JOIN entities e ON u.id = e.id
WHERE u.userid = 86765309;
Re tu comentario:
Sí, se puede añadir columnas reales a la mesa de entidades de cualquier atributo que sabe que se aplica a todos los contenidos tipos. Por ejemplo:
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
);
Las columnas para entity_type y creation_date le permitiría arrastran las entidades en orden cronológico (o cronológico inverso) y saber qué conjunto de tablas de índice coincide con el tipo de entidad de una fila determinada.
es posible que desee para ver [bases de datos de documentos] (http://en.wikipedia.org/wiki/Document-oriented_database). Estos también le permiten almacenar documentos completos, al igual que FriendFeed, pero la base de datos se ocupa de todos los índices por usted. –