php - 在代码中引用 MySQL 表键的最佳方式

标签 php mysql

我不是专业的 Web 开发人员,但我在高中时接触过 php。我目前正在为我在大学里所属的组织之一更新网站。我真的没有一个简洁的方式来问我的问题,所以我举一个例子:

对于我们组织的办公室,表格是这样的:

officeid_officename
+------------+------------+
| officeid   | officename |
+------------+------------+
| 1          | president  |
| ...        | ...        |
+------------+------------+

officeid_memberid
+------------+----------+
| officeid   | memberid |
+------------+----------+
| 1          | 234      |
| ...        | ...      |
+------------+----------+

memberid_memberdata
+------------+------------+-----+
| memberid   | membername | ... |
+------------+------------+-----+
| ...        | ...        | ... |
| 234        | John Smith | ... |
| ...        | ...        | ... |
+------------+------------+-----+

据我所知,这对表格来说是一个合适的设计,因为它允许 1) 任意更改办公室名称(例如,如果“总统”成为“最高霸主”)2) 它允许成员可以任意添加到办公室或从办公室中删除 3) 最后,每个成员的数据都可以更改,而不会影响该成员与办公室的链接。

我遇到的问题是,在我编写的代码中,我拥有的授权取决于成员担任的职位。我可以想到三个选项来表示允许哪些办公室执行哪些操作。

1) 使用“President”等作为要检查的标识符(例如 if($officename === "president") { ... do something ... } )

  • 但是,这似乎违背了表格设计的目的,因为更改办公室名称会破坏授权。

2) 使用 officeid 作为标识符来检查(例如 if($officeid === 1) { ... do something ... } )

  • 但是,这似乎缺乏可维护性,因为开发人员在编辑当前代码或编写 future 代码时将不得不不断地引用数据库以查看 id 指的是哪个办公室。

3) 在配置文件中定义常量,例如 PRESIDENT_CONSTANT = 1 或类似的东西,并检查常量(例如 if($officeid === PRESIDENT_CONSTANT) { ...做点什么... )

  • 但是 a) 这与 (1) 有共同的问题,因为职位名称可能会改变 b) 这实际上是在配置文件中重新创建 officeid_officename 表

在三个选项中,我觉得第二个是最正确的,但我对可维护性问题有挥之不去的感觉。有没有更好的方法来完成我在这里需要做的事情?

谢谢。

最佳答案

第二个很好。然后你可以通过这个 sql 找到一个办公室有哪些成员:

SELECT memberid FROM officeid_memeberid WHERE officeid = 1 AND  is_del = 0;

您还可以使用此 sql 查找成员现在加入的办公室:

SELECT officeid FROM officeid_memeber_id WHERE memberid = 234 AND is_del = 0;

is_del 字段用于在您要从办公室中删除成员或某些成员时进行更新:

INSERT INTO officeid_memberid (officeid,memberid,is_del) 值 (1,234,0);

删除时:

UPDATE officeid_memberid SET is_del = 1 WHERE memberid = 234 AND officeid = 1;

这样您就可以找到哪些办公室成员已经加入但现在不在。

关于php - 在代码中引用 MySQL 表键的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828779/

相关文章:

php - 如何让这个 session 进入另一个.php?edit<?php echo $result->id;?>

c# - MySql .NET 连接器返回字节数组而不是实际类型

mysql - 选择和分组范围

php - 将数据库中的关键字显示为复选框选项

php - 生成面包屑的递归函数

php - 从 CSV 使用 PHP 更新 MySQL 时超时

php - Wordpress 选项页面中动态生成的下拉列表

php - 如何从搜索结果中每页显示 n 行数

mysql - 数据采集​​用什么数据库?

MYSQL - 如何用另一个表的对应行更新表的标题?