为什么数据库上有“关系”而不是仅仅使用SQL的连接?

2023-12-08

我总是在数据库文章或教程中看到……在他们使用数据库的任何地方,他们都使用一种称为关系的东西。我立即想到那些带有字段名称列表的小盒子,一个字段用一条线连接到另一个盒子中的另一个字段。

我不是数据库方面的专家(正如您可能知道的那样),但我使用过的一点点,我从来不需要关系。它们似乎总是多余的,因为我总是可以使用 JOIN 来实现在我看来它们的用途。它们是多余的还是有什么可以用 JOIN 做而不能用关系做的事情?还是我只是在胡说八道?


关系不仅仅是 SQL 查询的连接。关系提供了许多好处:

  • 数据的完整性
  • 查询便捷
  • 第三方工具集成的好处
  • 为未来使用数据库的 DBA/开发人员提供“自描述”数据模型
  • Etc

数据的完整性: 例如,关系有助于确保您的“订单记录”不能在没有“客户记录”的情况下存在。只需定义客户和订单之间的关系,数据库就可以确保这种情况不会发生。这有助于确保您的数据库不会变成一大堆垃圾数据

查询便利性: 关系可以使某些类型的查询变得更容易。删除客户记录可以自动同时删除客户的订单,这得益于客户和订单之间的关系

第三方工具集成的好处 许多第三方工具(我想到的是 O/R 工具)依赖于关系才能正常工作

真的,这个清单可以一直列下去……你应该使用它们,它们非常有益。即使您今天没有意识到其价值,如果您正在从事一个将在很长一段时间内持续增长的数据库项目,从一开始就建立关系也会对您有利。

我认为它们对于小型项目/一次性数据模型来说并不是那么重要......但对于任何实质性的东西,您最好使用它们。

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

为什么数据库上有“关系”而不是仅仅使用SQL的连接? 的相关文章

  • PostgreSQL 中字符串列类型的索引数组

    是否可以在类型为的列上创建索引文本数组 尝试使用GIN索引 但查询似乎没有使用这些索引 Example CREATE TABLE users name VARCHAR 100 groups TEXT Query SELECT name FR
  • CloudKit 通过 cron 作业发送推送通知?

    我正在创建一个大学餐饮菜单应用程序 在其中我需要根据每日菜单发送推送通知 最初 我计划通过 Heroku 将用户数据存储在数据库中 并使用 cron 作业将数据库中的数据与每日菜单进行比较 并向用户发送适当的通知 然而 在 Cloudkit
  • 什么是数据库池?

    我只是想了解数据库连接池的概念以及它是如何实现的 数据库联系池是一种用于保持数据库连接打开的方法 以便其他人可以重用它们 通常 打开数据库连接是一项昂贵的操作 尤其是在数据库位于远程的情况下 您必须打开网络会话 进行身份验证 检查授权等等
  • Sequelize.js - “不关联到”

    我在从数据库获取完整数据时遇到一些问题 那是我的模型 User module exports function sequelize DataTypes return sequelize define user id type DataTyp
  • fetchsize和batchsize对Spark的影响

    我想通过以下方式控制 RDB 的读写速度Spark直接 但标题已经透露的相关参数似乎不起作用 我可以得出这样的结论吗fetchsize and batchsize我的测试方法不起作用 或者它们确实会影响阅读和写作方面 因为测量结果基于规模是
  • 一列作为主键或两个外键作为主键

    我有以下数据库设计 An E Report有一个QAP其中有一些Requirements A QAP和它的Requirements 可以用于多个E Report Every Requirement每份电子报告中都会有 是 否 确认 我已经添
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤
  • 在标准化数据库模式中是否可以有多个外键?

    Address addressID houseNumber postcode roadName city county Reservation reservationID roomNo leadGuestID guest2ID guest3
  • HTML5 数据库存储(SQL lite) - 几个问题

    你好 我在网上找不到足够的关于 HTML5 数据库存储使用示例 CRUD 的初学者资源 我正在像这样打开 创建 我的数据库 var db document ready function try if window openDatabase
  • 为 Zend 应用程序提供数据库处理程序的“正确”方法是什么

    假设您严格遵守某个组织的惯例Zend应用程序 http framework zend com manual en zend application html 您应该在哪里设置数据库处理程序以供应用程序开发人员访问 我知道如何设置ZendDb
  • 在 Hibernate 中创建 UPDATE RETURNING 查询

    在 Oracle 中 我们可以创建一个更新查询 该查询将使用 RETURNING 子句返回更新的记录 Hibernate中有类似的功能吗 除了数据库生成的值之外 Hibernate 显然不需要返回更新的实例 因为对象传递给Session s
  • 如何使用 django ORM 在外键字段上连接两个表?

    假设我有以下模型 class Position models Model name models CharField class PositionStats models Model position models ForeignKey P
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • 如何处理数据库中的巨大结果集

    我正在设计一个多层数据库驱动的 Web 应用程序 SQL 关系数据库 用于中间服务层的 Java 用于 UI 的 Web 语言其实并不重要 中间服务层执行数据库的实际查询 用户界面只是要求某些数据 并不知道它是由数据库支持的 问题是如何处理
  • 什么是时序数据库?

    What is 时间序列数据库例如InfluxDB 我应该何时 何地使用它 请给我它的业务场景示例 检查wiki https en wikipedia org wiki Time series database 时间序列数据库 TSDB 是
  • 使用默认路径中的文件创建数据库

    我想创建一个创建数据库的 SQL 脚本 现在 我有这个 CREATE DATABASE Documents ON PRIMARY NAME N Documents FILENAME N Documents mdf LOG ON NAME N
  • Oracle 中仅在一列上不同

    我想在下表中使用不同的值 但仅在 PlayerID 列上使用 这就是我现在所拥有的 MATCHID PLAYERID TEAMID MATCHDATE STARTDATE 20 5 2 14 JAN 12 01 JUN 11 20 5 4
  • cmd 和 workbench mysql 查询性能差异

    我有两个问题 正如我的标题 哪一个对于对大量数据运行大型查询更有效 我查看了 MySQL 文档 其中解释了工作台的性能https www mysql com products workbench performance https www
  • 发布Oracle和SQL Server性能测试是否违反许可? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对Oracle和SQL Server中的空间索引进行性能测试 我想将其纳入我的理学硕士工作中 发布此类结果是否违反 dbms 的许可 也许有人已经

随机推荐

  • MS Access - Docmd.OpenReport

    我正在尝试打开一个包含两个日期 dateFrom 和 dateTo 之间的日期字段的报告 该日期字段来自表单中的文本框 共享的尝试不会起作用 第一个 因为日期应该以特定方式格式化 YYYY MM DD 或 MM DD YYYY 并用 值 而
  • 如何理解vertical-align: -0.125em和vertical-align: middle的区别?

    我看到代码了vertical align 0 125em 并思考它和vertical align middle vertical align middle means 将元素的中间与基线加上父级 x 高度的一半对齐 所以你需要找到middl
  • Chrome 中的“Access-Control-Allow-Origin 不允许 Origin null”。为什么? [复制]

    这个问题在这里已经有答案了 我正在开发一些 Javascript 以在我的 PC 上本地运行 我正在使用 jQuery CSV 插件 http plugins jquery com project csv 将 csv 文件加载到 javas
  • 将函数名称存储在数据库中然后执行

    我正在制作一种 CMS 系统 该系统在网页的各个部分中工作 并将每个部分作为不同的条目存储到 MySQL 数据库的表中 当用户第一次设置页面时 PHP 脚本调用一个名为addsection name content 将该部分添加到数据库中
  • Delphi:等待bat脚本运行结束

    我有bat 文件 可以进行一些操作 如何从 Delphi 运行该文件并等待 直到它停止 像这样的东西 procedure TForm1 Button1Click Sender TObject begin Starting bat file
  • Git:如何重置远程 Git 存储库以删除所有提交?

    如何重置远程和本地 Git 存储库以删除所有提交 我想以当前的 Head 作为初始提交重新开始 完全重置 删除 git本地目录 重新创建 git 存储库 cd project directory git init add some file
  • 如何从数组中返回随机值?

    我正在使用 jQuery 验证插件 并希望在成功时返回一个随机值 现在我正在尝试使用 var success message new Array success message 0 Good success message 1 Ok suc
  • pygame 让球互相弹开

    我试图让球互相弹开 我尝试使用reflect 方法 但由于某种原因不起作用 为了检测球 我使用了groupcollide 既然我想不出更好的方法 也许这是错误的 import pygame import random class Ball
  • 为什么我的 Python 合并排序这么慢?

    我在理解这种行为时遇到了一些困难 我正在使用 timeit module 测量执行时间并得到以下结果10000 cycles Merge 1 22722930395 气泡 0 810706578175 选择 0 469924766812 这
  • 根据可变的用户定义路径从关闭的工作簿复制数据

    我已经用尽了我的搜索能力来寻找解决方案 以下是我想做的事情的概述 用户打开启用宏的 Excel 文件 立即提示用户输入或选择所需工作簿的文件路径 他们需要选择两个文件 并且文件名可能不一致 输入文件位置后 第一个文件选择的第一个工作表将被复
  • 将列表转换为“转置”列表

    这可能是一个初学者问题 但我不知道如何寻找答案 因为我无法 命名 问题 我有 2 个列表或 2 个列表的元组 xxx time1 time2 time3 yyy value1 value2 value3 zzz xxx yyy 现在我想为每
  • iOS 4.3 库的 xcode4 文档

    我安装了 xcode4 并在 Organizer 我可以看到的文档iOS 4 3 库 Mac OS X 10 6 库 and Xcode 4 0 开发者库 但是 当我离线时 我无法访问 iOS 库文档 我得到加载网址时出错您没有连接到互联网
  • 什么控制PhoneGap是否打开外部浏览器/Safari?

    有时PhoneGap在Safari中打开网页 有时在其UIWebView中打开网页 是什么控制的 From PhoneGap支持普通网络吗 https github com callback callback ios blob master
  • Cron 表达式:在 ASP.Net Core 中每天运行一次任务

    我的asp net core程序需要收集前一天访问网站的所有IP 当一天结束时 我需要将 IP 列表输出到 txt 文件 因此 程序应该每天运行一次保存 IP 列表的方法 我应该如何设计它 在我看来 我会在startup cs并设置Task
  • 以编程方式包含在项目中

    我们如何使用代码将文件包含在项目中 我想包含这个文件 我也想要这样的等价物 在代码中 可能吗 您可以通过几种方法来做到这一点 命令行 devenv 命令 File AddExistingSolutionItem完整路径 文件名 项目文件 项
  • 将 Excel 批量转换为文本分隔文件

    您好 我在处理将 Excel 电子表格转换为 txt 文件时遇到问题 我想要做的是创建一个宏 它可以将一个文件夹中的所有 xls 文件转换为 txt 文件 目前正在处理的代码 Sub Combined Application Display
  • 按子列表的值对 LIst 列表进行排序

    private List
  • OmniFaces ViewScoped bean 的内存影响?

    据我了解 ViewScoped bean 仅在发生以下情况之一时才会被销毁 1 JSF 向另一个页面发送 POST 请求 其中包含类似
  • 在 Groovy 中查找方法的名称

    Groovy 有没有办法找出被调用方法的名称 def myMethod println This method is called method methodName 这与鸭子类型相结合将允许非常简洁 并且可能难以阅读 的代码 Groovy
  • 为什么数据库上有“关系”而不是仅仅使用SQL的连接?

    我总是在数据库文章或教程中看到 在他们使用数据库的任何地方 他们都使用一种称为关系的东西 我立即想到那些带有字段名称列表的小盒子 一个字段用一条线连接到另一个盒子中的另一个字段 我不是数据库方面的专家 正如您可能知道的那样 但我使用过的一点