2015-08-25 33 views
0

所以我有一个问题,我希望它不是太主观。正确的MySQL结构存储基于用户的数据

我有一个博客风格的网站,所以在主页上的文章会在发布的日期旁边加载,发布它的用户等基本数据是这样的。

我将其存储在MySQL像这样:

article_id  username  date      content   etc. 
1    user1   2015-05-14 01:35:14  my content a 
2    user2   2015-05-16 02:33:15  my content b 

这样一来,我可以用一个查询,在那里我获得用户名,日期,内容等

我的问题是显示它。我想让用户选择更改他们的用户名。我有两种选择。

我可以像现在一样继续存储数据,并手动将这样的表格与用户相关的数据更新为新的用户名。或者我通过user_id而不是username存储数据,并为每个加载的文章添加一个额外的查询,以从另一个user表中获取关联的用户名。

哪种方法是正确的?

我问这个,因为我认为有这种情况的推荐做法?按用户名存储数据并更新它,或者按ID存储以避免这样做是正常的 - 但是在查询数据时会以开销为代价。我猜只是在一个查询中可以显示基于id的数据的用户名,但是这仍然会花费更长的时间?

+0

user_id和一个连接,而不是一个额外的查询 –

+0

去与选项B – Drew

+0

肯定“商店数据由一个'user_id和用户名'在一个不同的表” – user5173426

回答

0

您应该创建一个用户表,存储将是增量的user_id和一个user_name。在您的应用中显示用户名时,请加入到users表中并显示该表中的名称,并始终保持最新状态。如果您希望允许更改用户名称,这是最佳做法。更新所有用户名它不建议使用文章表。这也可以让你存储其他与用户相关的信息,如电子邮件,加入日期等等,而不必将所有内容都保存在文章列表中。

1

取决于。您是否看到1:1Article:User的关系如果是,则存储在单个表中可能就足够了,但通常用户将发布多个文章,这将使其成为1:*关系,在这种情况下,您应该创建一个单独的文档表格为UserDetailsd并且user_idFOREIGN KEYArticle表中。

0

创建一个包含所有用户相关信息的独立表格,并更改当前表格,因此只包含内容和与文章相关的内容。这就是我建议你

0

制作一个单独的表users类似:

------------------- 
user_id | user_name 
------------------- 

user_id应该PK

而另一张表,让说,文章应该是这样的:

----------------------------------------------- 
arcticle_id | date | content | etc. | user_id 
----------------------------------------------- 

article_id可能是一个PKuser_id会从usersFK,使得它可以在其他表中使用,以及关系。

0

您可以为用户创建一个表,并在字段用户名上使用外键,指定更新行为。是这样的:

alter table posts add constraint fk_post_user foreign key (username) references users (name) on update cascade; 

这样,当你更新表用户的一行时,表格帖子上的所有用户名也会被更新。