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

2023-12-08

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

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


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

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

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

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

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

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

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

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

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

  • 如何找到 Oracle 数据库的 URL?

    如何找到 Oracle 数据库的 URL 和端口 Example jdbc oracle thin host port dbName 用户名 密码 是否有我可以查看的 SQL 命令或日志 配置文件 对于甲骨文来说 有一个tnsnames o
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个
  • WooCommerce:在数据库中查找产品

    我正在使用 WooCommerce 创建一个网站 我想根据用户在主页搜索表单中输入的邮政编码来限制用户可用的产品 为了能够实现这一目标 我必须在 phpMyAdmin 的数据库中指定每个产品的条件 但我似乎找不到它 有谁知道 phpmyAd
  • 使用 PHP 代码和 HTML 表单将 Excel (.csv) 导入 MySQL

    我知道还有其他类似的帖子 但每个人都建议直接在 PHPMyAdmin 中将其导入 MySQL 这工作完美 但我需要通过 HTML 表单导入 PHP 到 MySQL 我想要一个收集文件的 HTML 表单 然后将该文件传递给 PHP 脚本 我想
  • 是否可以自动化 SQL Server 2008 分析器?

    有一个post https stackoverflow com questions 488020 what is your most useful sql trick to avoid writing more code关于有用的 SQL
  • 如何在数据库中存储年月?

    是否有在数据库中存储年份和月份的标准方法 我需要根据月份和年份制作一些报告 我无法使用日期和函数实时提取月份 因为表很大 所以我需要预处理 我会和 Michael 的建议是什么 https stackoverflow com a 81694
  • DBMS 中的阻塞因素

    DBMS 中的阻塞因素是什么 我查看的位表示它是每个记录的块的下限值 因此 B R 下限 其中 B 是块大小 R 是记录 我只是想知道 有人可以告诉我它使用的主要原因 以及它是否真的是地板 我对 FLOORED 的理解是 1 5 降到 1
  • 关系代数 - 笛卡尔积与自然连接?

    我正在准备考试 但未能找到一个可靠的标准来确定笛卡尔积是否x要使用或者如果自然连接 X 是要使用的 我想出了一个粗略的指南 如果您需要投影与要连接的表中的属性同名的属性 则必须使用x并说明要投影的表名称 tableA colname1 ta
  • 数据库设计1对1关系

    我的数据库设计不正确 我应该在开发过程中解决这个问题吗 假定 user 表与 userprofile 表具有 1 1 关系 然而 实际设计中 用户 表与 用户配置文件 表具有 1 关系 一切正常 但无论如何应该修复它吗 做一件事 User
  • MySQL 行级锁

    我不确定行级锁是如何工作的 但这是我的问题 我有一个表 T id int balance int engine InnoDB 我想锁定 ID 1 的行 所以我开始一个像这样的事务 start transaction select from
  • 数据库设计 :: 2 个参与者事件中的标准化 :: 连接表或 2 列?

    Edit 更新广义问题以反映实际领域 曲棍球运动 实际的活动是比赛日程 参与者是团队 球队是最终的 所有者 即 当球队被删除时 任何相关的预定比赛 结果 球员和球员统计数据也应被删除 本线程到目前为止讨论的问题涵盖了将事件组合成具有 2 列
  • 将歌词存储在 MySQL 数据库中

    我想知道在 mysql 数据库中存储音乐 歌词 的最佳方式是什么 以及用于此目的的设置是什么 另外 我想要表格来存储断线 我正在考虑使用 指示新行并使用 php 替换字符串 我不知道从哪里开始 或者使用什么参数 varchar int 我知
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 为什么使用参数化查询将数据插入表比将值附加到查询字符串更快?

    为什么使用参数化查询向表中插入数据 string queryString insert into product id name values id name 比将值附加到查询字符串更快 string queryString insert
  • 子查询在多项选择时返回超过 1 个值的 SQL 错误

    我想要一个临时表 它将使用 select 语句插入值 但每次我运行查询时 总是出现错误 子查询返回超过 1 个值 当查询跟随 gt 或子查询用作表达式时 不允许这样做 该语句已终止 0 行受影响 这很奇怪 因为代码中似乎没有错误 但如果有的
  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • 为什么MongoDB不使用复合索引进行查询?

    以下是我对此集合的复合索引和单一索引 db Collection getIndexes 1 v 2 key id 1 name id ns service Collection 2 v 2 key FirstId 1 SecondId 1
  • SQLite 数据库安全

    我正在构建一个使用 Sqlite DB 的应用程序 用户可以将他们的信息输入数据库并检索它们 但是 我希望他们能够备份 sqlite 数据库 我所做的是将 sqlite 数据库放入文档文件夹中 以便他们可以使用 iTunes 将其检索出来
  • 如何检测数据库类型?

    我需要确保我连接的数据库是 MySQL 而不是 PostgreSQL 或 Microsoft SQL Server 我怎样才能知道正在使用哪种类型的数据库 第一个提示可能是如果您尝试使用 mySQL 数据库驱动程序连接到 PostgreSQ

随机推荐

  • 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的连接?

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