MYSQL应该使用2个查询或将它们添加到我的新表中

时间:2012-09-05 22:26:18

标签: php mysql

好吧,我为用户设置了1个表,它存储了USER_NAME,USER_ID和USER_COLOR 并为即将存储USER_NAME的日志创建一个新表

查看页面时我需要收到这些数据 我可以为日志执行2个查询,然后搜索USER_NAME = USER_NAME

的用户

或者我可以将USER_NAME,USER_ID和USER_COLOR全部存储在日志中 然后我只需1次查询即可获得所有数据。

什么会更快或更好?

示例查询

$sql = "SELECT id, username, level, namecolor FROM users ORDER BY level DESC"; 
$query = mysql_query($sql) or die(mysql_error());
$count = mysql_num_rows($query);
while($row = mysql_fetch_object($query)) {
    $Member_id = htmlspecialchars($row->id);

5 个答案:

答案 0 :(得分:3)

当您使用MySql时,您的数据库是关系数据库。

这给你(正如你已经知道的)许多优点,因此,不是在其他表中复制用户信息(已经存储在自己的表中)(在这种情况下是日志),你最好做{{1当需要有关用户的更多信息时。

让用户信息在自己的表中,因此,在查询日志数据时,您可以这样做:

joins

另一点:想一想在复制用户信息时会发生什么,如果您向用户表添加新字段(例如电子邮件)。

答案 1 :(得分:1)

更好的是第三种正常形式。简单来说,这意味着每个非关键列应该依赖于密钥,整个密钥,除了密钥之外什么都没有,所以请帮助我Codd: - )

有时候有充分的理由可以恢复较低的规范化水平,但它们很少见,您需要了解和缓解潜在的问题,例如每个用户ID最终会有多个用户名,反之亦然。我会说在这种情况下坚持使用多表版本。

答案 2 :(得分:0)

最好加入这些表:

select users.*, logs.* from logs inner join users on logs.USER_NAME=users.USER_NAME

您将在一个查询中获得所有信息。

答案 3 :(得分:0)

我认为您可以在不同的表格中将其作为核心用户信息,例如USER_NAMEUSER_IDUSER_COLOR,每个用户只能使用一个。另一方面,每个用户的日志可以很多。因此,如果将所有内容存储在日志表中,则每次为用户发生某些日志时,数据库将使用更多空间来存储其他信息,如USER_NAMEUSER_IDUSER_COLOR

我认为您应该阅读JOIN中的mysql,了解如何在一个查询中合并两个表并获得结果。有关JOIN Link

的更多阅读材料

我不能在此提出查询,因为它取决于您希望它从数据库中输出的数据类型。

答案 4 :(得分:0)

保留两个表格会更好。

数据库设计和第一个正常形式规定您不应多次拥有相同的数据。

因此,如果您将所有数据保存在第二个表中,那么您的设计实践就会很糟糕。

有一个很好的例子http://en.wikipedia.org/wiki/First_normal_form