管理一个表或多个表中的不同类别?

时间:2016-03-31 21:46:30

标签: php mysql database-design

我正在制作文章网站。我有一个名为CATEGORIES的数据库,其中包含表格:ArticlesEntertainmentLifestyleArticles包含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表,那么此查询将无效,我也不知道如何制作它。最后一个问题是将表分成不同的类别或将表合并到一个表中会更有效(性能明智)吗?

1 个答案:

答案 0 :(得分:0)

永远不要为每个小部件创建一个表。

如果两个表具有几乎相同的列,则它们可能应合并为一个表。它可能需要一个额外的列来分辨事物。并改变了索引。

标准化,但不要过度标准化。例如,不要将“连续”值标准化,例如DATETIME或FLOAT。

每张桌子上都有一个PRIMARY KEY。考虑使用“自然”PK,或使用AUTO_INCREMENT。 (有时一个是显而易见的选择;有时是另一个;有时它是硬币翻转。)

你的代码片段闻起来像你想要一些'随机'行。 My blog就此而言。