创建视图还是使用内部联接?

2023-12-24

我有一个规范化的数据库,其中外键/主键提供一对多数据库。

我计划使用 PHP 访问该数据库以进行基本的前端/后端显示。现在,我的问题来自这两个示例查询:

CREATE VIEW `view` AS
  SELECT
    functiondetails.Detail,
    functionnames.ID,
    functionnames.FunctionName,
    functionnames.Catogory
  FROM functiondetails
    INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID

or

SELECT
  functiondetails.Detail,
  functionnames.ID,
  functionnames.FunctionName,
  functionnames.Catogory
FROM functiondetails
  INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID

查询中没有错误,因为我运行了两次都没有失败,但我的总体问题是这样的:

如果我打算不断地从我的数据库中引用大量信息。创建一个视图会不会更容易,然后它会一直使用新添加的信息进行更新,或者在我的实际 php 上进行第二个查询会是更好的做法吗?示例:

$Query = $MySQli->prepare("
  SELECT
    functiondetails.Detail,
    functionnames.ID,
    functionnames.FunctionName,
    functionnames.Catogory
  FROM functiondetails
    INNER JOIN functionnames ON functiondetails.AsscID = functionnames.ID
")
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);

还是从我的观点中选择?

$Query = $MySQLi->prepare("SELECT * FROM `view`");
$Query->execute();
$Results = $Query->fetch_results();
$Array = $Results->fetch_array(MYSQLI_ASSOC);

那么哪一种方法是用于查询数据库的更好方法呢?


Views http://dev.mysql.com/doc/refman/5.0/en/view-algorithms.html are an 抽象层 http://en.wikipedia.org/wiki/Abstraction_layer创建抽象层的通常原因是为您提供一个工具,让您的生活更轻松。

使用视图的一些重大优点包括:

  1. Security
    您可以控制谁有权访问视图,而无需授予他们访问基础表的权限。

  2. 澄清
    很多时候,列标题的描述性并不充分。视图允许您使返回的数据更加清晰。

  3. 表现
    就性能而言,观点不会对您产生负面伤害。但是,您不会看到使用视图带来的性能提升,因为 MySQL 不支持物化视图 http://en.wikipedia.org/wiki/Materialized_view.

  4. 易于编码
    视图可用于重用复杂的查询,从而减少用户出错的空间。

  5. 易于管理
    每当您的表架构发生更改时,它都会让您的生活变得更轻松。

    例如,假设您有一个表,其中包含待售房屋,homes_for_sale,但后来您决定希望该表能够处理您曾经出售/当前正在出售的所有房屋,all_homes。显然,新表的架构将与第一个表有很大不同。

    如果您有大量查询来自homes_for_sale,现在您必须检查所有代码并更新所有查询。这会让您面临用户错误和管理噩梦。

    解决此更改的更好方法是用同名视图替换表。即使实际架构已更改,视图也会返回与原始表完全相同的架构。然后,如果需要的话,您可以按照自己的节奏检查代码,并更新查询调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建视图还是使用内部联接? 的相关文章

  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • php中的条件格式化html表与时间戳比较

    echo table style width 100 tr echo td Order td echo td Destination td echo td Location td echo td Status td echo td Time
  • 使用 PHP Selenium Webdriver 单击下拉菜单中的选项?

    我正在使用 PHP Selenium Webdriver 包装器Facebook https github com facebook php webdriver 任何人都可以给我一个如何单击或从选择下拉菜单中选择选项的示例吗 我已经尝试过这
  • MySQL:@@ 是什么意思?

    我正在阅读本页上的 MySQL 文档 http dev mysql com doc refman 5 1 en set statement html http dev mysql com doc refman 5 1 en set stat
  • 拥有更多列或更多行会更高效吗?

    我目前正在重新设计一个可能包含大量数据的数据库 我可以选择在数据库中包含许多不同的列或使用大量行 如果我在下面做一些大纲 可能会更容易 item id user id title description content category t
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 如何从 MySQL 数据查询创建 XML 文件?

    我想知道一种仅使用 MySQL 查询创建 XML 文件的方法 根本不使用任何脚本语言 有关于这个主题的书籍 教程吗 UPDATE 我想澄清一下 我想使用 sql 查询将 XML 数据转发到 php 脚本 Here s 关于从 MySQL S
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • TypeScript 编译速度极慢 > 12 秒

    只是把它放在那里看看其他人是否也遇到这个问题 我已经使用 webpack 作为我的构建工具 使用 typescript 构建了一个 Angular 2 应用程序 一切都运行良好 但是我注意到 typescript 编译超级超级慢 我现在只有
  • 使用 Instagram Basic Display API 时出现“无效平台应用程序”错误

    我正在尝试使用 Instagram Basic 显示 API 但是当我发布授权代码以获取访问令牌时 我不断收到以下错误 error type OAuthException 代码 400 error message 平台应用无效 我正在遵循此
  • MySQL如何获取unix时间戳的时间差

    我有一个保存值1506947452的变量 需要使用公式从该日期提取分钟 started data now date 但started date采用unix时间戳格式10位int数字 我以ajax形式收到并需要放入mysql查询i试试这个 S
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get

随机推荐

  • id 为“xxxx”的进程未在 Visual Studio 中运行(包括 2013 至 2017~ 版本)

    我无法从 Visual Studio 2013 运行任何应用程序 它会抛出 ID 为 xxxx 的进程未运行消息 我也用过 Telerik 我尝试了互联网上的所有解决方案 除了重新安装 Visual Studio 但没有任何帮助 请帮助 谢
  • 如何在 Java 中复制 PostgreSQL 的 uuid_generate_v3()?

    PostgreSQL create extension if not exists uuid ossp select uuid generate v3 uuid nil this is a test uuid generate v3 e1e
  • 电路如何再次闭合?

    我正在尝试理解 Hystrix 据我所知 当服务调用第三方服务并且该服务没有响应并且阈值已超过配置时 电路将被打开 并且后续呼叫将被短路 但我无法理解电路如何再次闭合 让我们假设我们的服务正在调用第三方服务 并且该服务无法正常工作 因此电路
  • 在 Mac OS X 中修改窗口按钮颜色

    如何修改 Mac OS X 中用于关闭 最小化 缩放的红色 黄色 绿色窗口按钮 某处必须有可编辑的资源或 plist 以下是我正在谈论的按钮 对于红 绿色色盲的人来说 这些颜色可能会让人抓狂 我希望他们选择交通灯中使用的真正的蓝色阴影 而不
  • 具有自定义 bin 边缘的 ggplot2 密度直方图

    我能够绘制密度直方图 并且能够使用自定义箱绘制常规直方图 但不能同时绘制两者 这是我的尝试 library ggplot2 vals c 2 6 5 2 4 1 6 9 5 7 5 2 4 4 5 5 6 3 6 1 4 7 1 4 myp
  • 包括静态库到./configure

    如何在执行命令时包含两个静态库 configure Ex configure prefix usr LDFLAGS L home lancy dictionary src WordNet 3 0 lib lWN 这里只包含一个静态库 我如何
  • 问题使用 msbuild 构建具有多个配置的单个项目

    Issue 我们在解决方案中使用配置转换 例如 调试 测试 登台 发布 但是 这些配置仅用于我们的 MVC 项目 所有的库只使用调试和发布 这更有意义 因为我们的库只需要在调试模式或发布模式下构建 尝试从命令行构建单个项目时会出现此问题 我
  • 在 Angular 13 中实现 Monaco 编辑器

    在 Angular 13 中实现 Monaco 编辑器的最佳选择是什么 我见过 ngx monaco editor 但上次更新是 9 个月 它已经升级到 Angular 12 Monaco 版本也有 0 20 0 11 02 2020 非常
  • 为什么我需要避免在循环内使用 try-catch-finally

    每次执行 catch 子句 将捕获的异常对象分配给变量 时 try catch finally 构造都会在运行时在当前作用域中创建一个新变量 而不是使用 var object foo bar i for i 0 len object len
  • 是否有针对 ASP.NET MVC 的分页解决方案在数据库中进行分页?

    我通过谷歌搜索发现的大多数 ASP NET MVC 分页解决方案看起来都以 IEnumerable 集合的形式从数据库表中获取所有行 对 IEnumerable 集合执行一些分页转换 然后将结果返回到视图 我希望能够在数据库端进行分页 但仍
  • 使用 Wait() 时 StreamSocket.InputStreamOptions.ReadAsync 挂起

    这是我能够准备的最小可能场景 此代码连接到 imap gmail com 读取初始服务器问候语 使用 Read 方法 发送NOOP命令 NO操作 读取 NOOP 命令响应 再次使用 Read 方法 问题是第二次读取挂起 如果使用 await
  • 无需源代码即可调试/绕过 BSOD

    你好 祝你有美好的一天 这里需要一些帮助 情况 我有一个不起眼的 DirectX 9 应用程序 名称和应用程序详细信息与问题无关 自某些驱动程序版本以来 它会导致所有 nvidia 卡 GeForce 8400GS 及更高版本 出现蓝屏死机
  • 类变量中的类型提示

    对于上面的代码 我收到以下错误 Parse error syntax error unexpected Connectors T STRING expecting variable T VARIABLE 当我删除类型提示并var dump
  • 如何让yield在调试模式下工作?

    我正在使用 ipdb 和 Yield 我注意到与 ipdb 一起使用时 产量并没有达到预期的效果 具体来说 当使用 ipdb 调试此代码时 并按 n 键盘中的字符只是跳过yield命令而不是从函数返回 def cats print 1 yi
  • Android ApplicationRecord 和 Google Analytics

    我正在开发一个可以通过 AndroidApplicationRecord 安装和打开的应用程序 AAR 请参阅http developer android com guide topics nfc nfc html http develop
  • 默认会话过期超时?

    默认情况下JSESSIONID关闭浏览器时cookie就过期了 但是关联的时间是多久HttpSession在服务器端真的有效吗 大多数容器默认为 30 分钟 您可以通过以下方式进行配置
  • 如何继承样式并覆盖某些内容?

    具体问题是如何继承我的自定义样式 Water 并覆盖其 Grid Background 部分 有没有可能 首先 我只想在那里放另一张图片 ButtonStyles1 xaml
  • __USE_FILE_OFFSET64 与 _FILE_OFFSET_BITS=64

    我正在尝试维护在许多不同系统上编译的代码 我见过十几种不同的请求方式lseek这需要 64 位 一些系统使用lseek64 一些使用lseeko 有些要求您定义 FILE OFFSET BITS 64 现在我刚刚找到了一个新的 需要你定义
  • 从命名范围的 Name 对象获取工作表名称

    I have Microsoft Office Interop Excel Workbook wb Microsoft Office Interop Excel Name name 假设我已经获得了命名范围的 Name 对象和 wb 有什么
  • 创建视图还是使用内部联接?

    我有一个规范化的数据库 其中外键 主键提供一对多数据库 我计划使用 PHP 访问该数据库以进行基本的前端 后端显示 现在 我的问题来自这两个示例查询 CREATE VIEW view AS SELECT functiondetails De