好吧,我为用户设置了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);
答案 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_NAME
,USER_ID
,USER_COLOR
,每个用户只能使用一个。另一方面,每个用户的日志可以很多。因此,如果将所有内容存储在日志表中,则每次为用户发生某些日志时,数据库将使用更多空间来存储其他信息,如USER_NAME
,USER_ID
,USER_COLOR
。
我认为您应该阅读JOIN
中的mysql
,了解如何在一个查询中合并两个表并获得结果。有关JOIN
Link
我不能在此提出查询,因为它取决于您希望它从数据库中输出的数据类型。
答案 4 :(得分:0)
保留两个表格会更好。
数据库设计和第一个正常形式规定您不应多次拥有相同的数据。
因此,如果您将所有数据保存在第二个表中,那么您的设计实践就会很糟糕。