0

嗨,我是 Web 开发的新手。我正在尝试开发一个社交网站。在数据库设计级别,我觉得我遇到了一些问题。这是我的问题。

我有一个状态表,其中属性是:

  • status_id (auto_increment)
  • 用户身份
  • 地位

我的计划是,当我的主页加载时,它将从关系表中查找我的朋友(我有一个关系表),并使用关系表中的 user_id 从状态表中加载状态(按最新排序)。这是一个好计划吗?我正在考虑它,因为这个表可以包含数百万行(如果我很幸运,但我需要最有效的方法),如果一个用户有 200 或 300 个朋友查询会变慢吗?是否有必要在表中保持非常旧的状态?请给我一些建议。这张表会有频繁的插入,所以索引可能不是一个好主意,你怎么看?我还有评论表,其中属性是:

  • 用户身份
  • friend_id(评论谁的状态)
  • status_id(评论哪个状态)
  • 评论

这里没有主键。对于这个表问题是一样的。我使用 MySQL 数据库和 MyISAM 作为数据库引擎。InnoDB 呢?哪种引擎最适合社交网络?请指教,提前谢谢。

4

1 回答 1

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
)

如果某天最终表现不佳,您还可以将其存储CurrentStatusUsers表中,或使用仅包含每个用户最新状态的物化视图。

于 2012-07-13T18:32:23.940 回答