我目前正在维护一个相当大的办公室网络应用程序。我最近意识到,通过网络浏览器中的各种开发人员工具,选择框的值可以很容易地被用户修改(除其他外)。在服务器端,我会验证发布的数据是否为数字(对于下拉列表),但实际上并不检查数据库表中是否存在该值,例如我有一个用于称呼的下拉框('mr ','ms','mrs','Mr/ms') 等与数值对应。
目前我使用不提供外键引用完整性的 Mysql 的 Myisam 表,所以我正在考虑迁移到 Innodb,但这存在以下问题:
如果我想应用引用完整性(以确保插入有效的 ID),这意味着我必须索引所有不一定需要为性能问题(例如称呼)的列(如果使用完整性检查)落下)。如果一个非常大的数据库客户端表有 10 个类似的下拉列表(例如客户端组、员工人数、国家/地区等),那么索引每个链接表似乎有点过头了。
我的问题:
1)当使用参照完整性时,列真的也需要被索引吗?
2)我可能会忽略其他实用的解决方案吗?(例如,对每个下拉列表使用单独的查询来查看该值是否存在于表中?)
3)其他网络应用程序如何处理这些问题?
帮助赞赏!
谢谢帕特里克