繁体   English   中英

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

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

好吧,我为用户存储了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);

当您使用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

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

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

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

最好加入这些表:

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

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

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

我想您应该在mysql阅读有关JOIN的内容,了解如何在一个查询中组合两个表并获得结果。 关于JOIN Link的更多读物

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

保留两个表会更好。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM