嗨,我是网络开发的新手。我正在努力开发一个社交网站。在数据库设计层面,我觉得我有一些问题。这是我的问题。
我有一个状态表,其中属性为:
我的计划是当我的主页加载它将从关系表中查找我的朋友(我有一个关系表)和来自关系表的user_id它从状态表加载状态(按最新排序)。 这是一个好计划吗?我正在考虑它,因为这个表可以包含数百万行(如果我很幸运,但我需要最有效的方式)如果一个用户有200或300个朋友查询它会变慢吗?是否有必要在表中保持原状?请给我一些建议。这个表会经常插入,所以索引可能不是一个好主意,你怎么想? 我还有注释表,其中的属性是:
这里没有主键。对于这个表,问题是一样的。 我使用MySQL数据库和MyISAM作为数据库引擎。 InnoDB怎么样?哪种引擎最适合社交网络? 请提前告知。
答案 0 :(得分:0)
您需要存储历史状态吗?如果没有,只需将其设为NVARCHAR
表中的Users
字段即可。如果你想知道2011年7月3日比尔的状态,你需要约会。我对Microsoft SQL更熟悉,这样的事情应该这样做:
CREATE TABLE Statuses
(
UserID INT NOT NULL REFERENCES Users (UserID) ON DELETE CASCADE,
EffectiveDate DATETIME NOT NULL DEFAULT NOW(),
PRIMARY KEY (UserID, EffectiveDate DESC),
Status NVARCHAR(100) NOT NULL
)
IF 某天最终表现不佳,您也可以将CurrentStatus
存储在Users
表中,或者使用仅具有最新状态的物化视图用户。