我的应用程序有两种类型的用户,所以我采用一种标准方法来设计模式:
Table users(保存两种用户类型之间共享的字段):
+----+----------------+---------+
| id | email | type_id |
+----+----------------+---------+
| 1 | foo@bla.com | 1 |
| 2 | bar@bla.com | 2 |
| 3 | bla@foobar.com | 1 |
+----+----------------+---------+
<<p>表strong> user_types : +----+----------+
| id | name |
+----+----------+
| 1 | person |
| 2 | company |
+----+----------+
Table persons(第一用户类型):
+----+---------+------------+-----------+
| id | user_id | first_name | last_name |
+----+---------+------------+-----------+
| 21 | 1 | John | Smith |
| 23 | 3 | Sohn | Kmith |
+----+---------+------------+-----------+
Table companies (second user type):
+----+---------+--------------+
| id | user_id | name |
+----+---------+--------------+
| 31 | 2 | Company Inc. |
+----+---------+--------------+
persons
和companies
中的user_id
字段是引用users.id
的外键。
- /公司/ (ID) 有限公司
- /人/ (ID) 约翰·史密斯
我的问题是
我应该使用哪个ID来识别用户?哪个ID应该是"用户ID",将在整个应用程序中使用?
应该是users
表(users.id
)中的一个,还是应该是来自各自表(persons.id
或companies.id
)中的一个,因为它们都有自己的主键?
我的假设是每个表都应该有一个主键,所以我将使用来自任何特定于用户的表(persons或companies)的ID。
这个方法正确吗?
我认为对于一个用户,您将只有一个人或一个公司。如果是这种情况,我建议在company和person表中使用与user_id
相同的as id例如,companies
表是这样的:
+----+--------------+
| id | name |
+----+--------------+
| 2 | Company Inc. |
+----+--------------+
所以users.id = companies.id
person表也是一样。
这样就很清楚选择什么id了,因为它在所有表中都是相同的,不会造成混淆。
如果你不想这样改变表,我认为你应该选择第二级表的id。因此,对于company,从表中选择id并将其命名为company_id
(在代码中,而不是mysql中),对于person也是如此。这样,代码将清楚您所引用的id。