我的應用程序有2種類型的用戶,所以我採用標準方法之一來設計的架構:哪個ID應該標識具有兩種用戶類型的MySQL架構中的用戶?
表用戶(保持字段二者用戶類型之間共享):
+----+----------------+---------+
| id | email | type_id |
+----+----------------+---------+
| 1 | [email protected] | 1 |
| 2 | [email protected] | 2 |
| 3 | [email protected] | 1 |
+----+----------------+---------+
表user_types:
+----+----------+
| id | name |
+----+----------+
| 1 | person |
| 2 | company |
+----+----------+
表人(第一用戶類型):
+----+---------+------------+-----------+
| id | user_id | first_name | last_name |
+----+---------+------------+-----------+
| 21 | 1 | John | Smith |
| 23 | 3 | Sohn | Kmith |
+----+---------+------------+-----------+
表公司(第二用戶類型):
+----+---------+--------------+
| id | user_id | name |
+----+---------+--------------+
| 31 | 2 | Company Inc. |
+----+---------+--------------+
的user_id
字段中persons
和companies
是一個外鍵引用users.id
。現在
,在某些時候,我需要創建用戶個人資料頁,並且URL會使用用戶的ID,像這樣:
- /公司/ [ID] -company-INC
- /人/ [ID] - 約翰 - 史密斯
我的問題是:
其中ID應該用來識別用戶嗎?哪個ID應該是將在整個應用中使用的「用戶ID」?
它應該是從users
表(users.id
)的人,還是應在相應的表(persons.id
或)之一的一個,因爲他們都有自己的主鍵?
我的假設是,every table should have a primary key,所以我會去從任何用戶特定的表 - 個人或公司的ID。
這種方法是否正確?
我可能會誤解,但似乎您暗示由於'persons'和'companies'是「第一和第二」用戶類型,所以每個表中每個用戶只有一個條目* 。那是對的嗎?如果是這樣,那麼我不確定爲什麼這些都是單獨的表格。 (在任何情況下,'users.id'都是可以使用的) – aaronofleonard
@Amleonard由於性能原因,用戶表主要是分開的。這兩個用戶類型是非常不同的(上面的表格被簡化了),所以如果我想把所有的用戶信息保存在'users'表中,這個行會變得非常寬。相反,我想保持清潔,特別是將來可能會有更多的用戶類型,如果邏輯上分離,添加它們會更容易。擁有「簡短」用戶表格也會提高登錄速度。 ---關於你的建議 - 你說的'user.id'。你能寫出原因嗎? 「人員」和「公司」中的主鍵不會無用嗎? – lesssugar
主鍵可能沒用,這沒關係。你甚至可以重用用戶ID作爲這些表中的主鍵,所以你只有一個ID。用戶ID的好處是它是唯一的,它不需要額外的步驟就可以到達用戶表。如果您使用人員/公司ID,那麼您必須先查找人員/公司,然後獲取用戶ID(或者您可以使用連接 - 無論哪種方式,您都在查看三個表格,這會否定一個首先是小型用戶表)。 – siride