簡體   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