我只是在创建一个社交网络来练习我的技能(PHP、HTML、CSS、JavaScript 等)。现在在设计数据库布局时会出现一个问题,我很遗憾无法解决。
我有一个名为UserMain的表:
+------------+---------------------+
| Field | Type |
+------------+---------------------+
| u_id | bigint(20) unsigned |
| u_email | varchar(256) |
| u_password | varchar(30) |
| u_data | varchar(25) |
| u_friends | varchar(28) |
+------------+---------------------+
用于存储一般数据,在注册时输入。
我想将用户数据(姓名、姓名、性别、生日等)分离到另一个名为data的表中,当然还有名为Friends的表中的用户之间的关系。所以我决定为每个用户创建一个数据和朋友表,通过 php 使用上面的 u_id 我想出了这样的东西,[u_id]_data:
+------------+---------------------+
| Field | Type |
+------------+---------------------+
| u_prename | varchar(20) |
| u_surname | varchar(20) |
| u_sex | boolean |
| u_birthday | DATE |
| u_avatar | varchar(28) |
+------------+---------------------+
现在我不想在friends 表上附加值,因为问题显然始于[u_id]_data 表。一个用户只有一个姓氏和一个姓氏等,所以它是一个 1 行表。现在的问题:
如何处理与主键相关的表输入?
对我来说,为单行创建一个新的“id int not null auto_increment pk”似乎是不必要的,所以我不知道主键使用什么列组合。
也许您知道此设计的更好实现,但请考虑以下几点:
你有什么新的实现并不重要,我唯一不想拥有的是一个名为的表data
,其中我有所有用户的数据。
好吧,我可能对 MySQL 有不好的看法,或者我不是很了解,但我只是拥有多个数据表的想法来自性能原因。
我在更改或插入数据时的想法:
- GetTheUsersId(在用户表中搜索 ID。如果我有的话,这可能需要一点时间......假设有 10,000,000 个用户)
- 当拥有 [u_id] 时,我可以使用数据表来查找我正在搜索的内容。
对于由(再次)10,000,000 行组成的表,需要更长的时间。现在不要开始笑,因为我正在将抽象和维度提升到一个遥远的水平。这只是为了支持节省性能的想法。