什么是表前缀,它们的优缺点是什么?这与 MySQL 有关。
7 回答
这通常用于区分同一脚本的不同安装。例如,假设您的服务器上有两个具有不同内容的 Joomla 安装,但只有一个 MySQL 数据库。
现在,由于明显的原因,两个 Joomla 安装不能共享相同的数据库表,因为这将导致两个安装显示相同的内容。这就是前缀起作用的地方。
通过使用不同的表前缀,您可以让 Joomla 安装 #1 知道它应该使用前缀为 JOS_ 的所有表,而 Joomla 安装 #2 必须使用前缀为 JOS2_ 的所有表
表不需要前缀。
这完全取决于您。
但是,我们在表所属的应用程序中为与 MODULES 相关的表添加前缀,以便更轻松地对表进行分组。
有些人提倡 tbl 或 tbl_(例如 tbl_MyTable 或 tblMyTable),而其他人则使用诸如 MyTable_T 之类的后缀。
我个人避免使用前缀/后缀。如果架构随时间变化,我可以用视图代替表,所以我并没有真正区分这两种类型的对象。
最重要的是,您的团队中记录了您的命名准则,并且你们都坚持同一组准则以保持一致性。
在少数情况下,例如针对特定类型网站(如 WordPress 等)创建了恶意软件脚本的情况,更改表前缀作为一项额外的安全措施非常有用。
例如,添加表前缀会掩盖常见的表名,从而使黑客更难通过 SQL 注入或其他安全漏洞访问您的数据库中的数据,因为他们首先需要发现您的表名是什么。
但是,请务必将表前缀视为非常小的安全层。它不应该是您的主要安全方法。您仍应采取其他更重要的安全措施来防止 SQL 注入和其他类似威胁。例如,根据您的代码设置方式,黑客仍有可能通过 SQL 注入运行“显示表”命令来获取数据库表的名称。
奇怪的是没有人提到您也可以使用表前缀来使用通常保留的关键字作为表名。
例如,现在可以使用 t_user 或 t_order。
如果您有一个复杂的网站和数据库结构,表前缀可能有助于防止数据库中的命名冲突。
在以下情况下,您经常会看到表前缀:
多个脚本被集成到一个网站中,完成的网站需要共享数据,但是如果没有每个脚本唯一的前缀,表名会发生冲突。
您正在向您获得的脚本添加功能,并且您想要区分该脚本的本地表和您手动创建的新表。这样,如果您创建一个新表,它不会与将来对基本脚本的任何更新冲突,因为它具有不同的表前缀。
您有一个只为您提供一个数据库的托管计划,并且您希望使用该数据库为多个脚本提供服务。(由于各种原因,不建议这样做,但我见过用户这样做。)
当您从头开始编写脚本时,通常不需要表前缀,因为您可以控制数据库结构的所有方面。当您开始将多个脚本集成在一起时,它变得有用,有时甚至是必要的。它允许您在多个脚本之间创建唯一的数据视图和连接表等,而无需担心数据库中的命名冲突。
根据您的命名约定,区分表和视图可能会有所帮助。
缺点是就表名称而言,您可能会受到限制。Oracle 对此有 30 个字符的限制。如果使用“Tbl_”作为前缀,则会自动丢失 4 个字符。这可能是个问题。