2015-08-25 66 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; 

這樣,當你更新表用戶的一行時,表格帖子上的所有用戶名也會被更新。