【问题标题】:What is a table prefix?什么是表前缀?
【发布时间】:2011-05-29 08:36:57
【问题描述】:

什么是表前缀,它们的优缺点是什么?这与 MySQL 有关。

【问题讨论】:

  • 您指的是表名前缀,例如 tblTask​​s 还是模式,即 dbo.tasks
  • 表前缀是添加到每个表名的前缀,顾名思义。

标签: mysql database database-design prefix


【解决方案1】:

根据您的命名约定,区分表和视图可能会有所帮助。

缺点是就表名而言,您可能会受到限制。 Oracle 对此有 30 个字符的限制。如果使用“Tbl_”作为前缀,则会自动丢失 4 个字符。这可能是个问题。

【讨论】:

    【解决方案2】:

    表格不需要前缀。

    这完全取决于你。

    但是,我们在表所属的应用程序中为与 MODULES 相关的表添加前缀,以便更轻松地对表进行分组。

    【讨论】:

      【解决方案3】:

      有些人提倡 tbl 或 tbl_(例如 tbl_MyTable 或 tblMyTable),而其他人则使用诸如 MyTable_T 之类的后缀。

      我个人避免使用前缀/后缀。如果架构随时间发生变化,我可以用视图代替表,所以我并没有真正区分这两种类型的对象。

      最重要的是,您的团队中记录了您的命名准则,并且你们都坚持同一组准则以保持一致性。

      【讨论】:

        【解决方案4】:

        这通常用于区分同一脚本的不同安装。 例如,假设您的服务器上有两个具有不同内容的 Joomla 安装,但只有一个 MySQL 数据库。

        现在,由于显而易见的原因,两个 Joomla 安装不能共享相同的数据库表,因为这会导致两个安装显示相同的内容。这就是前缀的作用。

        通过使用不同的表前缀,您可以让 Joomla 安装 #1 知道它应该使用前缀为 JOS_ 的所有表,而 Joomla 安装 #2 必须使用前缀为 JOS2_ 的所有表

        【讨论】:

          【解决方案5】:

          在少数情况下,例如针对特定类型网站(如 WordPress 等)创建了恶意软件脚本的情况,更改表前缀作为一项额外的安全措施非常有用。

          例如,添加表前缀会掩盖常见的表名,从而使黑客更难通过 SQL 注入或其他安全漏洞访问您的数据库中的数据,因为他们首先需要发现您的表名。

          但是,请务必将表前缀视为非常小的安全层。它不应该是您的主要安全方法。您仍应采取其他更重要的安全措施来防止 SQL 注入和其他类似威胁。例如,根据您的代码设置方式,黑客仍有可能通过 SQL 注入运行“显示表”命令来获取数据库表的名称。

          【讨论】:

          • 通过默默无闻的安全性不是安全性。这是一种安全的错觉。
          • @MariuszJamro 你读过我的回答吗?此外,并非所有的默默无闻都只是安全的幻觉。例如,我刚去度假,把我的一些技术藏在家里一个很难找到的地方。最终有人能弄清楚它在哪里吗?绝对地。它是否增加了额外的安全层?绝对地。仅仅是因为它掩盖了它,它是一种安全的幻觉吗?绝对不是。
          • 这是一种错觉,因为您感觉更安全,而实际上并非如此。实际上,它不会阻止任何人对您的数据库结构进行逆向工程并找出特定表实际存储/执行的操作。
          • @MariuszJamro 再说一遍,你有没有读过我的回答?我已经在回答中解决了您的问题。
          • 我做到了,我理解你的推理。我只是在这个问题的上下文中发现它是错误的。表前缀对于安全目的没有用,因为使用它们不会获得“额外的安全性”。你只会让你的生活更艰难。
          【解决方案6】:

          奇怪没有人提到你也可以使用表前缀来使用通常保留的关键字作为表名。

          例如现在可以使用 t_user 或 t_order。

          【讨论】:

          • 你可以为一个mysql表使用任何名字,例如CREATE TABLE `DROP DATABASE webshop;` (`value` INT)
          【解决方案7】:

          如果您有一个复杂的网站和数据库结构,表前缀可能有助于防止数据库中的命名冲突。

          您经常在以下情况下看到表前缀:

          • 多个脚本被整合到一个网站中,完成的网站需要共享数据,但是如果没有每个脚本唯一的前缀,表名会发生冲突。

          • 您正在向获得的脚本添加功能,并且想要区分该脚本的本地表和手动创建的新表。这样,如果您创建一个新表,它不会与未来对基本脚本的任何更新发生冲突,因为它具有不同的表前缀。

          • 您有一个只为您提供一个数据库的托管计划,并且您希望使用该数据库来为多个脚本提供服务。 (由于各种原因,不建议这样做,但我看到用户这样做。)

          当您从头开始编写脚本时,通常不需要表前缀,因为您可以控制数据库结构的所有方面。当您开始将多个脚本集成在一起时,它变得有用,有时甚至是必要的。它允许您在多个脚本之间创建唯一的数据视图和连接表等,而无需担心数据库中的命名冲突。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-07-07
            相关资源
            最近更新 更多