php - 归一化表

标签 php html database phpmyadmin normalization

我有一个这样的表:

+--------+---------------+--------------+---------------+
|   id   |   firstname   |   lastname   |   foods       |
+--------+---------------+--------------+---------------+
|   1    |   James       |   Bonds      |   BBQ         |
|   2    |   James       |   Bonds      |   Hamburger   |
|   3    |   James       |   Bonds      |   Pizza       |
|   4    |   David       |   Smith      |   BBQ         |
|   5    |   David       |   Smith      |   Pizza       |
+--------+---------------+--------------+---------------+

这是我插入数据库时​​的代码:

if($_POST["Submit"]=="Submit"){
for ($i=0; $i<sizeof($checkbox);$i++){
$sql="INSERT INTO tbl_info VALUES ('NULL', '$fname','$lname', '".$checkbox[$i]."')";
$result=mysql_query($sql);
 }
}

或者是否可以这样:

+--------+---------------+--------------+---------------+
|   id   |   firstname   |   lastname   |   foods       |
+--------+---------------+--------------+---------------+
|   1    |   James       |   Bonds      |   BBQ         |
|   1    |   James       |   Bonds      |   Hamburger   |
|   1    |   James       |   Bonds      |   Pizza       |
|   2    |   David       |   Smith      |   BBQ         |
|   2    |   David       |   Smith      |   Pizza       |
+--------+---------------+--------------+---------------+

'foods' 列是一个复选框值,因此它是多余的(如果用户选择了 10 个复选框值,它也会产生 10 行具有相同名字的行等等)。

问题是如果我需要改变用户的信息,我必须一个一个地改变它,这是错误的。如果我要删除用户信息,培训列值也应该一次删除。(我不能使用 implode 或 explode)。 对不起。 PHP 新手。

提前致谢。

最佳答案

你应该有三个表:

Person Table (person_id, firstname, lastname)

Food Table (food_id, name)

PersonFood Table (person_id, food_id)

插入记录时,将人员详细信息输入人员表。将食物详细信息存储在食物表中。当一个人喜欢某种食物时,在 PersonFood 表中添加一条记录,其中将包含 person_id 和 food_id。这样,当一个人的详细信息发生变化时,只需要更改人员表中的记录即可。 检索结果时,您可以进行连接查询。

这种规范化形式称为Third normal form

关于php - 归一化表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016555/

相关文章:

php - 调用函数作为参数,这是不好的做法吗?

php - php中如何防止快速页面请求?

html - 绝对 div 中的 float div 不会扩展父级。 Clearfix 似乎不起作用

php - 使用 PHP 和 MySQL 填充 Quiz Web 应用程序表单

c# - 在多个项目中使用 SQL 数据库

mysql - SELECT AND INSERT QUERY into multiple table with conditions

PHP - array_map 2 列并按键删除重复行

php - 在网页中放置数据库连接函数的位置

php - 控制剩余时间的输出

html - CSS 过渡 parent 以匹配 child 的最终高度