2016-03-31 62 views
0

我在製作文章網站。我有一個數據庫叫CATEGORIES與表:Articles,Entertainment,LifestyleArticles包含EntertainmentLifestyle的所有條目。 Entertainment包含娛樂類型的所有條目,Lifestyle包含生活方式類型的所有條目。每個表有7列:id,類別(文章的類別),鏈接(文章的鏈接),標題(文章的標題),圖像(文章的圖像URL),Counter(文章的視圖數量),dateStamp(寫文章的日期)。在一個表格或多個表格中管理不同的類別?

擺脫LifestyleEntertainment表,並只依靠Articles表會更有效嗎?我之所以將它們分開,是因爲當用戶閱讀時,讓我們說一個娛樂文章,隨機顯示一個娛樂文章列表。爲了顯示隨機文章,我在娛樂表中獲取最高的ID,獲取6到最高ID(6是我想要顯示的文章的數量)之間的隨機數,然後假設我從隨機生成器中獲得8,則會顯示第8至第3條(DESC LIMIT 6)。下面的代碼:

<?php 

$MAX_ID = $db->query("SELECT MAX(id) FROM Entertainment"); 
$MAX_ID = $MAX_ID->fetch_array(); 
$MAX_ID = $MAX_ID[0]; 

$RAND_NUM = mt_rand(6, $MAX_ID); 

$resultSet = $db->query("SELECT * FROM Entertainment 
          WHERE id <= $RAND_NUM ORDER BY id DESC LIMIT 6"); 

if ($resultSet->num_rows != 0) { 
    $conditional = true; 
    $conditional2 = true; 
    echo "<div class='row'>"; 
    while ($rows = $resultSet->fetch_assoc()) { 
     $image = $rows["image"]; 
     $title = $rows["title"]; 
     $link = $rows["link"]; 
     $count = number_format($rows["Counter"]); 

     if ($conditional == true && $conditional2 == true) { 
      // display articles 
     } else { 
      // display other articles 
     } 
    } 
} 

如果我刪除了Entertainment表,那麼這個查詢是行不通的,我不知道我會怎麼回事做到這一點。最後一個問題是,將表分成不同的類別還是將這些表合併到一個表中會更有效(性能方面)?

+2

是的。看到正常化 – Strawberry

+0

像草莓的意思我不會再去了解這個https://en.wikipedia.org/wiki/Database_normalization並在你的數據庫中使用它。如果你繼續按照自己的方式嘗試,你會很頭疼(他也告訴我,你的未來也會贊同這一點)。 – paskl

+0

@Strawberry是對哪個問題? – user2896120

回答

0

從不爲每個小部件製作一張桌子。

如果兩個表具有幾乎相同的列,那麼它們可能應該組合成一個表。它可能需要一個額外的專欄來區分這些事情。並改變索引。

標準化,但不要過度標準化。例如,不要將DATETIME或FLOAT等「連續」值標準化。

每個表上都有PRIMARY KEY。考慮使用「自然」PK,或使用AUTO_INCREMENT。 (有時一個是明顯的選擇,有時是另一個;有時候是硬幣翻轉。)

你的代碼片段聞起來像你想要一些'隨機'行。 My blog就這樣。

相關問題