Rất đơn giản - có lẽ đơn giản hơn bạn mong đợi.
Khi bạn lưu trữ một thực thể blog, bạn sẽ chèn vào bảng thực thể chính của khóa học. Blog giống như sau:
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: ... }'
);
Bạn cũng chèn vào bảng chỉ mục riêng cho từng loại thuộc tính hợp lý. Sử dụng ví dụ của bạn, userid cho blog không giống như userid cho một tweet. Kể từ khi bạn muốn chèn một blog, bạn sau đó chèn vào bảng chỉ mục (s) cho blog của thuộc tính (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');
Đừng chèn vào bất kỳ bảng chỉ số tweet, bởi vì bạn vừa tạo một blog, không phải là một tweet .
Bạn biết tất cả các hàng trong blog_userid
blog tham chiếu, vì đó là cách bạn chèn chúng. Vì vậy, bạn có thể tìm kiếm các blog của một người dùng nhất định:
SELECT e.*
FROM blog_userid u JOIN entities e ON u.id = e.id
WHERE u.userid = 86765309;
Re bình luận của bạn:
Vâng, bạn có thể thêm các cột thực vào bảng đơn vị đối với bất kỳ thuộc tính mà bạn biết áp dụng đối với tất cả nội dung loại. Ví dụ:
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
);
Các cột cho ENTITY_TYPE và CREATION_DATE sẽ cho phép bạn thu thập dữ liệu thực thể trong thứ tự thời gian (hoặc đảo ngược thứ tự thời gian) và biết được tập hợp các bảng chỉ số phù hợp với loại thực thể của một hàng nhất định.
Bạn có thể muốn xem [cơ sở dữ liệu tài liệu] (http://en.wikipedia.org/wiki/Document-oriented_database). Chúng cũng cho phép bạn lưu trữ toàn bộ tài liệu, giống như FriendFeed, nhưng cơ sở dữ liệu sẽ xử lý tất cả các chỉ mục cho bạn. –