2016-03-31 6 views
0

Ich mache eine Artikel-Website. Ich habe eine Datenbank namens CATEGORIES mit Tabellen: Articles, Entertainment, Lifestyle. Articles enthält alle Einträge von Entertainment und Lifestyle. Entertainment enthält alle Einträge von Unterhaltungstyp und Lifestyle enthält alle Einträge des Lifestyle-Typs. Jede Tabelle hat 7 Spalten: ID, Kategorie (Kategorie des Artikels), Link (Link des Artikels), Titel (Titel des Artikels), Bild (Bild URL des Artikels), Counter (die Anzahl der Ansichten des Artikels), dateStamp (das Datum, an dem der Artikel geschrieben wurde).Verschiedene Kategorien in einer Tabelle oder mehreren Tabellen verwalten?

Wäre es effizienter, die Tabellen Lifestyle und Entertainment loszuwerden, und verlassen Sie sich einfach auf die Tabelle Articles? Der Grund, warum ich sie auf diese Weise getrennt habe, ist, dass, wenn der Benutzer liest, sagen wir einen Unterhaltungsartikel, eine zufällige Liste von Unterhaltungsartikeln gezeigt wird. Um zufällige Artikel zu zeigen, nehme ich die höchste ID in der Unterhaltungstabelle, bekomme eine Zufallszahl zwischen 6 und der höchsten ID (6 ist die Anzahl der Artikel, die ich anzeigen möchte), und dann sage ich, dass ich 8 vom Zufallsgenerator bekomme, dann werden die Artikel 8 bis 3 angezeigt (DESC LIMIT 6). Hier ist der Code:

<?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 
     } 
    } 
} 

Wenn ich die Entertainment Tabelle entfernt, dann würde diese Abfrage nicht funktioniert, und ich weiß nicht, wie sonst würde ich es machen. Die letzte Frage ist, ob es effizienter wäre, die Tabellen in verschiedene Kategorien aufzuteilen oder die Tabellen zu einer Tabelle zusammenzufassen.

+2

ja. Siehe Normalisierung – Strawberry

+0

Wie Erdbeermönchen würde ich nicht weiter gehen, bevor Sie diese https://en.wikipedia.org/wiki/Database_normalization verstehen und in Ihrer Datenbank verwenden. Sie würden starke Kopfschmerzen bekommen, wenn Sie es weiterhin auf Ihre Art versuchen (auch Ihre Zukunft stimmt dem zu, sagte er mir). – paskl

+0

@Strawberry Ja zu welcher Frage? – user2896120

Antwort

0

Erstellen Sie niemals eine Tabelle pro Widget.

Wenn zwei Tabellen praktisch identische Spalten haben, sollten sie wahrscheinlich in einer einzigen Tabelle zusammengefasst werden. Es kann eine zusätzliche Spalte benötigen, um die Dinge auseinander zu halten. Und Änderungen an den Indizes.

Normalisieren, aber nicht zu normalisieren. Normalisieren Sie beispielsweise 'kontinuierliche' Werte wie DATETIME oder FLOAT nicht.

Haben Sie einen PRIMÄRSCHLÜSSEL auf jedem Tisch. Erwägen Sie die Verwendung eines "natürlichen" PK oder verwenden Sie AUTO_INCREMENT. (Manchmal ist eine die offensichtliche Wahl; manchmal ist die andere; und manchmal ist es ein Münzwurf.)

Ihr Code-Snippet riecht, als ob Sie einige 'zufällige' Zeilen möchten. My blog über solche.

Verwandte Themen