我不是一个专业的Web开发人员,但是我在高中时涉猎了php。我目前正致力于更新我在大学所属的一个组织的网站。我真的没有一个简洁的方式来问我quesetion,所以我就举一个例子:在代码中引用MySQL表键的最佳方式
对于我们组织的办事处,表是这样的:
officeid_officename
+------------+------------+
| officeid | officename |
+------------+------------+
| 1 | president |
| ... | ... |
+------------+------------+
officeid_memberid
+------------+----------+
| officeid | memberid |
+------------+----------+
| 1 | 234 |
| ... | ... |
+------------+----------+
memberid_memberdata
+------------+------------+-----+
| memberid | membername | ... |
+------------+------------+-----+
| ... | ... | ... |
| 234 | John Smith | ... |
| ... | ... | ... |
+------------+------------+-----+
至于我能告诉,这将是一个适当的设计表格,因为它允许1)任意改变办公室名称(例如,如果“总统”成为“最高霸主”)2)它允许成员随意添加和删除从办公室3)最终,每个成员的数据可以改变,而不需要该成员与受影响的办公室的链接。
我遇到的问题是,在我写的代码中,我的授权取决于成员拥有的办公室。我可以考虑代表哪些办事处可以执行哪些操作的三种选择。
1)使用“总统”等作为标识检查(如if($officename === "president") { ... do something ... }
)
- 不过,这似乎击败表设计的目的,如在办公室名称的变化将打破授权。
2)使用officeid作为标识符检查(如if($officeid === 1) { ... do something ... }
)
- 然而,这似乎缺乏可维护性,开发商不断地将要引用数据库,看看有什么ID指他们在编辑当前代码或编写未来代码时使用哪个办公室。
3)在配置文件中,使得PRESIDENT_CONSTANT = 1
,或类似的东西定义常量和检查对常量(如if($officeid === PRESIDENT_CONSTANT) { ... do something ... }
)
- 然而一)本发行股票与(1)该位置的名称可能会改变b)这基本上是重新创建officeid_officename表中的配置文件
出了三个选项,我觉得二号是最正确的,但我有一个关于挥之不去的情怀maintai可行性问题。有没有更好的方法来完成我需要在这里做的事情?
谢谢。
我会编辑代码来澄清,我不担心服务器负载,我担心在代码中写入'if($ office = 1)'等事情,并期待未来的网站管理员离开,因为它看起来很任意对某人进来。 – 2012-01-12 13:26:07
啊,在这种情况下,适当的做法是将其包装在一个明确命名的函数中。 (这也有助于通过抽象逻辑来实现可维护性。)因此,而不是:if($ office == 1)[[请注意两个符号!]]尝试:if(userHasPrivilege(ADMINISTER_FOO))或类似的东西 - 然后执行逻辑检查:function userHasPrivilege($ requestedPrivilege){}。 – 2012-01-12 18:44:32
我喜欢使用这些功能的想法。谢谢一堆! – 2012-01-18 05:08:08