我不是专业的 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/