所以我有一个问题,我希望它不太主观。
我有一个博客风格的网站,所以在主页上的文章与发布日期,发布它的用户等等一起加载。基本数据是这样的。
我将它存储在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存储以避免必须这样做 - 但是以查询数据时的开销为代价。我猜测只能在一个查询中显示基于身份的数据的用户名,但这还需要更长的时间?
答案 0 :(得分:1)
取决于。如果是的话,您是否看到与Article:User
存在 1:1 关系,那么存储在单个表中可能就足够了,但通常用户会发布多篇文章,使其成为{{{ 1}}关系,在这种情况下,您应该为1:*
创建一个单独的表,并在UserDetailsd
表中将user_id
设为FOREIGN KEY
。
答案 1 :(得分:0)
您应该创建一个users表,存储user_id,它将是incremental和user_name。在应用程序中显示用户名时,请加入users表并显示该表中的名称,它始终是最新的。如果您希望允许更改用户名,这是最佳做法。更新所有用户名,不建议使用文章表。这还允许您存储其他与用户相关的信息,如电子邮件,加入日期等,而无需将所有内容保留在文章表中。
答案 2 :(得分:0)
创建一个包含所有用户相关信息的单独表格并更改当前表格,因此仅包含与内容和文章相关的内容。这就是我建议你
的原因答案 3 :(得分:0)
为users
创建一个单独的表格,如:
-------------------
user_id | user_name
-------------------
user_id
应该是PK
。
另一张桌子,让我们说文章应该是这样的:
-----------------------------------------------
arcticle_id | date | content | etc. | user_id
-----------------------------------------------
其中article_id
可以是PK
而user_id
可以是来自FK
表的users
,可以建立一种可以在其他表格中使用的关系好。
答案 4 :(得分:0)
您可以为用户创建表,并在字段用户名上使用外键,指定更新时的行为。是这样的:
alter table posts add constraint fk_post_user foreign key (username) references users (name) on update cascade;
这样,当您更新表用户的行时,表帖子上的所有用户名也将更新。