0

我只是在创建一个社交网络来练习我的技能(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 有不好的看法,或者我不是很了解,但我只是拥有多个数据表的想法来自性能原因。

我在更改或插入数据时的想法:

  1. GetTheUsersId(在用户表中搜索 ID。如果我有的话,这可能需要一点时间......假设有 10,000,000 个用户)
  2. 当拥有 [u_id] 时,我可以使用数据表来查找我正在搜索的内容。

对于由(再次)10,000,000 行组成的表,需要更长的时间。现在不要开始笑,因为我正在将抽象和维度提升到一个遥远的水平。这只是为了支持节省性能的想法。

4

1 回答 1

0

我唯一不想拥有的是一个名为 data 的表,其中包含所有用户的数据。

请告诉我们更多关于为什么这不是一个选项?这是存储用户数据的一种完全有效的方式。

但是要回答您的问题,如果表中只有一行,您可能根本不需要任何键。无论如何,在大多数情况下,您将通过表名引用该行:

SELECT * FROM [uid]_data ...
SELECT * FROM [uid]_data JOIN ...
UPDATE [uid]_data ...
INSERT INTO [uid]_data ...
DELETE FROM [uid]_data --You're probably going to want to DROP the table as well
于 2013-11-08T13:52:06.397 回答