问题标签 [rdbms-agnostic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
14 回答
15487 浏览

sql - 视图有什么用?

我只是想大致了解 RDBMS 中使用的视图。也就是说,我知道什么是视图以及如何制作视图。我也知道我过去用它们做什么。

但我想确保我对视图的用途和视图不应该用于的用途有透彻的了解。进一步来说:

  1. 视图有什么用?
  2. 有没有在你不应该使用视图的情况下使用视图很诱人?
  3. 为什么要使用视图来代替表值函数之类的东西,反之亦然?
  4. 是否存在乍一看并不明显的视图可能有用的任何情况?

(为了记录,其中一些问题是故意幼稚的。这部分是概念检查。)

0 投票
11 回答
2150 浏览

sql - 为 SQL 插入生成 ID 的最佳方法是什么?

生成将在 INSERT 语句中立即使用的 ID 号的最佳、独立于 DBMS 的方法是什么,使 ID 大致按顺序排列?

0 投票
4 回答
19018 浏览

sql - 有许多索引有什么缺点?

我最近通过为 SQLite 提供一个很好的索引来将复杂的查询速度提高了一个数量级。像这样的结果让我想知道我是否应该索引很多其他通常用于 JOIN 或 ORDER BY 子句的字段。但我不想过分热心并让它适得其反:我认为一定有一些理由创建索引,否则默认情况下每个字段都会被索引。

在这种情况下,我使用的是 SQLite,但当然也欢迎与 DBMS 无关的建议。

0 投票
17 回答
1295 浏览

sql - SQL 可移植性问题

我的公司让我为 Python ORM 完成 Oracle 的后端。我很惊讶 RDBMS 做事情的方式有多么不同,即使是简单的东西。我学到了很多关于 Oracle 和其他 RDBMS 之间差异的知识。纯粹出于好奇,我想了解更多。

在将 SQL 从一个平台移植到另一个平台方面,有哪些常见的“陷阱”?

请,每个答案只有一个陷阱。

0 投票
6 回答
10148 浏览

sql - 外键级联多个路径和循环有什么问题?

在 SQL Server 2005 中,我刚刚发现了臭名昭著的错误消息:

在 YYY 表上引入 FOREIGN KEY 约束 XXX 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

现在,StackOverflow 有几个关于此错误消息的主题,所以我已经有了解决方案(在我的情况下,我将不得不使用触发器),但我很好奇为什么会出现这样的问题。

据我了解,他们基本上想要避免两种情况——循环和多条路径。循环将是两个表具有彼此级联的外键。好的,一个循环也可以跨越多个表,但这是基本情况,更容易分析。

当 TableA 具有 TableB 和 TableC 的外键,而 TableB 也具有 TableC 的外键时,就会出现多条路径。再次 - 这是最小的基本情况。

我看不到在任何这些表中删除或更新记录时会出现任何问题。当然,您可能需要多次查询同一个表以查看哪些记录需要更新/删除,但这真的有问题吗?这是性能问题吗?

在其他 SO 主题中,人们甚至将使用级联标记为“有风险的”,并指出“解决级联路径是一个复杂的问题”。为什么?风险在哪里?哪里有问题?

0 投票
9 回答
1334 浏览

database-design - 如何在 RDBMS 中最好地实现 1:1 关系?

昨天在做一个项目时,我遇到了一种特殊的 1:1 关系,这让我想知道——如何最好地实现这一点(显然,我们做错了 :D)

这个想法是有两种类型的实体,A 和 B。它们可以各自独立存在,但它们之间也可以有联系。如果有链接,那么它必须是 1:1 链接,并且双向工作。

这就像一个瓶子和一个帽子。它们可以分开存在,但是当结合在一起时,瓶子将只有一个盖子,而盖子将仅连接到一个(并且是同一个)瓶子上。

您将如何实现这种关系,同时牢记有关规范化、数据完整性等的所有最佳实践?

补充:差点忘了说——它们每个都有十几个属性,所以将它们放在同一个表中,其中一半字段为 NULL 是一个非常尴尬的解决方案。此外,可以随时断开链接并与另一个实体重新创建链接。

0 投票
8 回答
3291 浏览

sql - 在 SQL 中编写左/右 JOIN 时是否使用 OUTER 关键字?

我经常看到这样写SQL的人:

我自己写的很简单:

对我来说,“OUTER”关键字就像线路噪音——它没有添加额外的信息,只是让 SQL 变得混乱。在我知道的大多数 RDBMS 中,它甚至是可选的。那么......为什么人们仍然写它?这是一种习惯吗?可移植性?(你的 SQL 真的是可移植的吗?)还有什么我不知道的?

0 投票
4 回答
4908 浏览

mysql - 具有不同数据类型答案的调查 SQL 设计

我正在进行一项在线调查。大多数问题的答案范围为 1-5。如果我们需要在调查中添加问题,我会使用一个简单的 Web 表单,它会在相应的表格中插入一个 INSERT,瞧!调查提出了新问题——没有新代码或对数据库结构进行更改。

我们被要求添加可以有不同数据类型答案的调查问题。规范是让调查“可配置”,以便在未来的任何时候,当有人说:“我们需要一个新的调查来询问 {text answer question}, {1-5 question}, {true false question} , {question with a date as an answer}”,我们可以在不改变数据库结构的情况下做到这一点。

我试图想出存储这些答案的最佳方法,但我想出的每一种方法似乎都有些骇人听闻。

有些问题可能有一个是/否或真/假的答案,有些可能有一个整数答案(“过去一个月你使用过技术支持多少次?”),另一个答案可能有一个日期、一个字符串、一个倍数具有单个值的选择,具有多个值的多项选择等。或者有时,特定的答案值可能会提示一个子问题(“什么让您失望......?”)

简单的解决方案是将每个问题作为调查中的一列,将其答案作为调查中的一列,以及是否将其作为调查中的一列。这对我来说就像一团糟——这是一张大桌子;不是很“关系”。

头脑风暴,我能想出的“最佳”方法是为每种答案类型设置不同的表格,但这容易受到数据完整性问题的影响。换句话说,我会

等等

上述问题的一个问题是,我不能保证仅在 DDL 中的任何问题都存在至少一个且只有一个答案。

另一种解决方案可能是在 Questions 表中为答案设置一个二进制或字符串列,并将所有答案编码为某种字符串或二进制格式,并将它们存储在答案列中。这为每个问题提供了至少一个且只有一个答案,但随后我无法访问 SQL 查询中的聚合功能。这让我觉得这不是一个非常“相关”的解决方案。

因此,我发现上述想法存在问题。有没有“最好”的方法来解决这个问题?

既然我已经花时间表达了这个问题和我的想法,我提出的广泛问题似乎是“我想在不进行任何编码的情况下存储任意类型的数据......”这是绝望?

我正在使用 MySQL,所以我无法访问其他 RDBMS 可能的东西。

0 投票
5 回答
1191 浏览

mysql - 带有多个答案的“问题”和“答案”

这个问题与这篇文章有关: SQL design for survey with answers of different data types

我有一个调查应用程序,其中大多数问题都有一组 1-5 的答案。现在我们要做的问题可能有各种不同的答案类型——数字、日期、字符串等。感谢堆栈的建议,我用一个字符串列来存储答案。有些问题是多项选择,所以除了“问题”表外,我还有一个“答案”表,其中包含问题的一组可能答案。

现在:我应该如何存储“选择所有适用的”问题的答案?我应该制作一个“chosen_answers”或类似的子表吗?或者答案表是否应该有一个“选择”列,表明受访者选择了该答案?

0 投票
2 回答
132 浏览

sql - 如何将结果仅附加到较小的表中的一对多表连接?

基本上我有一个一对多的表。我想将较大表的列附加到较小表的结果集中。我最终会得到一个与小表相同大小的结果集,但同样,它会包含来自多面表的相关信息。

一个问题:多面表没有定义主键,尽管可以建立一个复合键(同样它不是约束)。