2012-11-06 71 views
0

如何將我的主表中名爲「用戶名」的所有用戶與我的主表中的字段鏈接或添加到另一個表,以便我可以運行檢查和比較值,而無需將大量行添加到主表中?這將是一個更清潔,更有組織的設置。將字段值和ID鏈接到另一個表?

表名爲login_users。這是我的主表,它存儲他們的基本信息

username  email     password 
Anthony  [email protected] 
Josh   [email protected] 
Tsuyoshi  [email protected] 

表2調用了badge_status。該表格將保持其狀態,以確定他們是否已在我的網站上解鎖了成就。我想引入用戶名。

username  badge1    badge2 
Anthony  locked    unlocked 
Josh   unlocked    locked 
Tsuyoshi  unlocked    locked 

而且,可以表2自動使用新的用戶,當他們註冊,因爲所有新註冊量被導入到第一個表進行更新。作爲一個方面說明,我正在使用phpmyadmin。

感謝您獲得此設置的任何幫助。非常感謝。

回答

8

我覺得你應該normalize your data通過使用下面的架構,而不是:

  • login_users [表]
    • 用戶名
    • 電子郵件
    • 密碼
  • 徽章[表]
    • BadgeId INT PRIMARY KEY
    • BadgeName
    • ...(任何其他相關的數據列)
  • users_badges [表]
    • 用戶名(外鍵約束的用戶名欄上login_users表)
    • BadgeId(外鍵約束BadgeId列上badges表)

這將允許您添加儘可能多的巴無需更改數據庫模式或腳本即可隨意更改。

2

我不明白你爲什麼要分開這些表。理論上講,兩者之間有一對一的關係。您的查詢「可以在新用戶註冊時自動更新表2」,因爲所有新註冊都導入到第一個表中「進一步支持爲什麼分裂這些表只會產生不必要的開銷

其他開銷包括過度複雜的JOIN以獲取數據以及需要在badge_status.username以及外鍵上添加額外的唯一約束。


如果你真的想分離出這些表,我建議以下設置,而不是這使得查詢特定的徽章,並增加新的徽章很簡單:

 
login_users: username, email, password, ... 
badges: id, name, description, ... 
users_badges: username, badge_id, status, unlocked_date, ... 
+2

打我吧。這是使用交叉引用/複合表的方式,以便每個用戶可以有0到多個徽章。如果您要顯示列表,我可能會在徽章表格中添加排序或排序列。您也可能想要在創建時將插入初始化到user_badges表中,並默認它們被鎖定,但兩個點都不在討論範圍之內。 – TEEKAY

相關問題