[英]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_NAME
, USER_ID
, USER_COLOR
,每個用戶只能使用一個。 另一方面,每個用戶的日志可以很多。 因此,如果將所有內容存儲在日志表中, USER_COLOR
每次為用戶發生某些日志時,數據庫將使用更多空間來存儲USER_NAME
, USER_ID
, USER_COLOR
等其他信息。
我想您應該在mysql
閱讀有關JOIN
的內容,了解如何在一個查詢中組合兩個表並獲得結果。 關於JOIN
Link的更多讀物
我不能在這里提出查詢,因為它取決於什么類型的數據以及您希望它如何從數據庫中獲取。
保留兩個表會更好。
數據庫設計和第一個常規表單規定您不應多次擁有相同的數據。
因此,如果您將所有數據保存在第二個表中,那么您的設計實踐就會很糟糕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.