这两个PHP&;使用MySQL方法显示表中的积分更符合逻辑?

这两个PHP&;使用MySQL方法显示表中的积分更符合逻辑?,php,mysql,sql,credits,Php,Mysql,Sql,Credits,我在一个使用PHP和MySQL显示信用的网站上工作。我已经做了两个版本的相同的东西,我有一个艰难的时间来决定哪一个是最好的一个使用。一个使用2个表,另一个只使用1个表。我已经把事情安排好了,上面列出了职位的名称,然后把员工放在下面。我无法决定是否更容易查看credits\u position表,然后从credits\u people中获取所需内容,或者我是否应该只使用credits\u people来保存所有内容。哪个版本更容易保持更新 SQL PHP 在大型数据库上,您希望节省空间,以便将其用

我在一个使用PHP和MySQL显示信用的网站上工作。我已经做了两个版本的相同的东西,我有一个艰难的时间来决定哪一个是最好的一个使用。一个使用2个表,另一个只使用1个表。我已经把事情安排好了,上面列出了职位的名称,然后把员工放在下面。我无法决定是否更容易查看
credits\u position
表,然后从
credits\u people
中获取所需内容,或者我是否应该只使用
credits\u people
来保存所有内容。哪个版本更容易保持更新

SQL PHP
在大型数据库上,您希望节省空间,以便将其用于相关数据

因此,一个规范化的表,其中只有category_id(当然还有更多这样的表),可以节省大量空间

但我怀疑你会有数百万个类别,所以你应该从小处着手,如果需要,你可以增加

CREATE TABLE `credits__topic` (
 `topic_id` INT(11) NOT NULL AUTO_INCREMENT,
 `category_id` INT(11) DEFAULT NULL,
 `name` VARCHAR(48) DEFAULT NULL,
 `category` VARCHAR(48) DEFAULT NULL COMMENT 'Job name',
 PRIMARY KEY (`topic_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 26;
CREATE TABLE `credits__category` (
 `category_id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(48) DEFAULT NULL COMMENT 'Job name',
 PRIMARY KEY (`category_id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 6;
INSERT INTO `credits_people` (`topic_id`, `category_id`, `name`, `category`)
VALUES 
(1, 1, 'Matthew Campbell', 'Creator'),
(2, 2, 'Godzilla', 'Assistant'),
(3, 1, 'Billy Bob', 'Creator'),
(4, 4, 'Martha Stewart', 'Tester'),
(5, 2, 'Mothra', 'Designer'),
(6, 2, 'Rodan', 'Contributing'),
(7, 2, 'King Ghidorah', 'Designer'),
(8, 3, 'Mechagodzilla', 'Assistant');
INSERT INTO `credits_position` (`category_id`, `name`)
VALUES
(1, 'Creator'),
(2, 'Designer'),
(3, 'Assistant'),
(4, 'Tester'),
(5, 'Contributing');
<?php
 $connection = mysqli_connect ("localhost", "root", "root", "main");

 // Version 1:
 $data = mysqli_query ($connection, "SELECT `mc`.`name` AS 'category_name', `mt`.`name` AS 'topic_name', `mt`.`category` AS 'topic_category' FROM `credits_position` AS `mc` INNER JOIN `credits_people` AS `mt` USING (`category_id`);");
 // Version 2:
 $data = mysqli_query ($connection, "SELECT `name` AS 'category_name', `category` AS 'topic_category' FROM `credits_people`;");

 // Works with both versions
 $responses = array ();
 while ($row = mysqli_fetch_array ($data)) {
  array_push ($responses, $row);
 }
 // This loads the 1st category name.
 $category = $responses [0] ["category_name"];
 echo "<p>" . $category . "</p>\n";
 echo "<ol>\n";
 foreach ($responses as $response) {
  // This loads when it finds that the category is different from the previous loop.
  if ($category !== $response ["category_name"]) {
   $category = $response ["category_name"];
   echo "</ol>\n";
   echo "<p>" . $response ["category_name"] . "</p>\n";
   echo "<ol>\n";
  }
  echo "<li>" . $response ["topic_name"] . "</li>\n";
 }
 echo "</ol>";

 mysqli_close ($connection);
?>