【问题标题】:MySQL table structure with one row. Best handling for management and insertionMySQL 表结构只有一行。管理和插入的最佳处理
【发布时间】:2013-11-08 13:15:40
【问题描述】:

我只是创建一个社交网络来练习我的技能(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)         |
+------------+---------------------+

现在我不想在朋友表上附加值,因为问题显然始于 [u_id]_data 表。一个用户只有一个姓氏和一个姓氏等,所以它是一个 1 行表。现在的问题:

如何处理与primary key 相关的表格输入?

对我来说,为单行创建一个新的“id int not null auto_increment pk”似乎是不必要的,所以我不知道主键使用什么列组合。

也许您知道这种设计的更好实现,但请考虑以下几点:

不管你有什么新的实现,我唯一不想要的是一个名为 data 的表,其中包含所有用户的数据。 p>

好吧,我可能对 MySQL 有不好的看法,或者我不是很了解,但我认为只有多个数据表是出于性能原因。

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

  1. GetTheUsersId(在用户表中搜索 ID。这可能需要 如果我有的话……比方说 10,000,000 个用户)
  2. 拥有 [u_id] 后,我只需使用数据表即可找到我要搜索的内容。

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

【问题讨论】:

  • 哇,后退一点。您为每个用户创建了一个单独的表?
  • 嗯...这是个坏主意吗?我认为 MySql 可以轻松处理 10.000 个表,因为它只是数据,存储在不同的文件中,搜索时我只需要搜索“用户”表。找到 u_id 后,我可以轻松访问数据表。
  • 这是个糟糕的主意。 MySQL 可以处理很多表,但这不是重点。只需一张用户表,其中包含所有用户。

标签: php mysql sql database social-networking


【解决方案1】:

我唯一不想拥有的是一个名为 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

【讨论】:

  • 我在我的问题中添加了信息。用表名引用表也是我想到的一个想法。然而,一张桌子必须有一个pk,不是吗?
  • @Hans123 它没有。 PK 在唯一标识行的标准方法中很有用,但在您的模式中并非如此。此外,具有 10.000.000 行的表并不一定意味着查找速度会很慢。就性能而言,数据库非常聪明。
  • 另外,请参阅this 页面了解有关索引的一些信息以及它们如何帮助优化您的表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多