如何为多个用户设计数据库表(MySQL)?

问题描述:

我想知道为多个用户设计数据库表的最佳方法,就像任何需要用户登录才能开始发布任何内容的网站。如何为多个用户设计数据库表(MySQL)?

我的代码应该为每个用户或不同的东西创建单独的表?

通常,在任何需要引用用户的表中,您只需要有一个user_id列。不过,如果你想要更多的细节,你必须更具体地解决你所遇到的问题。

通常,所有用户都存储在一个表中,每个用户都在一个单独的行上。

基本列将包括:USER_ID,USER_NAME,USER_PASSWORD,出生日期,user_ip,头像等...

我会建议寻找一个现有的数据库结构,无论是论坛或CMS中,并注册了几个测试帐户并查看它们如何置于数据库中。

本质上你需要看看你正在使用的实体以及它们如何进行交互。

如果我们考虑一个基本的例子,我们有一个简单的站点,注册用户可以在一个单板上发布消息。在这里,我们的实体是用户和消息,每个用户可以发布多条消息(1:M关系)。因此,我们需要一个用户表和一个消息表。

在这个例子中的表结构将是:

Users(PK user_id, forename, surname, ...) 
Messages(PK message_id, FK user_id (references Users), timestamp, message_text, ...) 

那么如果我们想扩展这个让用户可以在消息发表评论,我们不能评论存储在消息记录本将呈现一个多对多的关系(许多用户可以对许多消息发表评论)并且需要序列化或其他东西,所以我们使用另一个表引用用户和消息的评论。

Comments(PK comment_id, FK user_id (references Users), FK message_id (references Messages), timestamp, comment_text) 

(PK - 主键,FK - 外键,... - 任何你想存储)

上面我已经使用了简单替代主键,虽然在规范化的利益你可以摆脱这些并使用组合键代替(比如,消息时间戳,user_id和文本)。