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


MYSQL should i use 2 querys or add them to my new table

好吧,假设我有一个用户表,它存储USER_NAME、USER_ID和USER_COLOR并正在为日志创建一个新表,该表将存储USER_NAME

查看页面时,我需要接收此数据我可以做两个查询,一个是日志,然后搜索USER_NAME=USER_NAME 的用户

或者我可以将USER_NAME、USER_ID和USER_COLOR全部存储在日志中那么我只需要一个查询就可以获得所有的数据。

什么更快或更好?

样本查询

$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);

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

这给您(正如您已经知道的)带来了许多优势,因此,与其在其他表(本例中为日志)中复制用户信息(已经存储在自己的表中),不如在需要更多用户信息时执行joins

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

SELECT logs.log_id, logs.log_date, logs.user_name, users.user_color
FROM logs
LEFT JOIN users ON logs.user_name = users.user_name

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

最好是第三种范式。简单地说,这意味着每个非键列都应该依赖于键,整个键,除了键什么都不依赖,所以请帮助我编码:-)

有时有充分的理由恢复到较低的正常化级别,但这种情况很少见,您需要了解并缓解潜在的问题,例如每个用户ID最终会出现多个用户名,反之亦然。在这种情况下,我会说坚持多表版本。

最好加入这些表:

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

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

我认为您可以将其放在不同的表中,作为核心用户信息,如USER_NAMEUSER_IDUSER_COLOR,每个用户只有一个。另一方面,每个用户的日志可能很多。因此,如果您将所有内容都存储在日志表中,那么每当用户出现某些日志时,您的数据库将使用更多空间来存储USER_NAMEUSER_IDUSER_COLOR等附加信息。

我认为您应该阅读mysql中的JOIN,了解如何将两个表组合在一个查询中并获得结果。JOIN链路上的更多读数

我不能在这里提出查询,因为它取决于什么样的数据以及你希望它如何从数据库中出来。

最好保留这两个表。

数据库设计和第一个普通表单规定您不应该多次拥有相同的数据。

所以,如果你把所有的数据都保存在第二个表中,你就是在做一个糟糕的设计实践。

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