小编MDC*_*CCL的帖子

在 SQL 中实现一对零或一关系

假设我正在为存在一对零或一 (1-0..1) 关系的场景设计数据库。例如:

  • 有一组用户有些 用户也可能是客户

因此,我创建了两个对应的表,userscustomers,但是……

…在给定的 SQL 平台中表示和实现这种情况的最佳方法是什么?我考虑了两种可能的解决方案:

  1. 在里面 users表中,添加customer可能是 FOREIGN KEY 引用customersNULL标记的列。

  2. customers表中,包括一个userUNIQUE指向users表格列(设置有约束)。

我已经在一些论坛上问过类似的问题,但答案基本上是“你需要什么”,“你觉得方便什么”。我不喜欢这种回答。我想要一个严肃的 DB 理论,一个有根据的答案。我在哪里可以读到 1-0..1 关系?

foreign-key database-design

12
推荐指数
1
解决办法
8387
查看次数

如何从日志中隐藏敏感信息,如明文密码?

我无权访问 Postgres 安装,因此无法检查。

我是一名安全人员,我在日志中看到了明文密码:

create user user1 with password 'PLAINTEXT PASSWORD'
Run Code Online (Sandbox Code Playgroud)

在日志中没有明文密码的情况下,DBA 如何更改或创建他们的密码?

我见过这个,它指出您可以使用密码的 md5 散列,但散列也是明文。有没有更好的办法?

postgresql logs password postgresql-9.3

12
推荐指数
1
解决办法
4152
查看次数

什么是数据库中的表膨胀?

有人可以解释一下数据库术语中的膨胀是什么意思吗?例如,说索引膨胀是什么意思。我试图寻找它,但没有解释什么是腹胀,只有它引起了什么或它是由什么引起的。

postgresql terminology

12
推荐指数
2
解决办法
2万
查看次数

为什么我需要将 NULL 转换为列类型?

我有一个助手,它正在生成一些代码来为我进行批量更新,并生成如下所示的 SQL:

( active 和 core 字段都是 type boolean

UPDATE fields as t set "active" = new_values."active","core" = new_values."core"
FROM (values 
(true,NULL,3419),
(false,NULL,3420)
) as new_values("active","core","id") WHERE new_values.id = t.id;
Run Code Online (Sandbox Code Playgroud)

但是它失败了:

ERROR: column "core" is of type boolean but expression is of type text

我可以通过添加::boolean空值来让它工作,但这看起来很奇怪,为什么 NULL 被认为是类型TEXT

此外,转换有点棘手,因为它需要对代码进行大量修改才能知道它应该将 NULL 转换为什么类型(列和值的列表目前是从一个简单的 JSON 对象数组自动生成的) .

为什么这是必要的,是否有更优雅的解决方案,不需要生成代码知道 NULL 的类型?

如果相关,我将在Node.JS上使用sequelize来执行此操作,但在 Postgres 命令行客户端中也得到相同的结果。

postgresql null cast

12
推荐指数
1
解决办法
6574
查看次数

如何使用初始空的 B+ 树的键输入记录?

显示按(1, 2, 3, 4, 5)的顺序输入带有键的记录到一个初始为空的B+-阶m = 3的树的结果。 如果溢出,将节点拆分,不要重新分配邻居的钥匙。是否可以以不同的顺序使用键输入记录以获得较低高度的树?

来自Relational DBMS Internals,第 5 章:动态树结构组织,第 50 页

我不擅长这个但我尝试过吗?左侧和 > 右侧:

直到插入 1,2 :

在此处输入图片说明

然后,就我们必须拆分节点而不是将密钥重新分配给邻居(我将其理解为子节点)而言,我只在单元格的右侧插入了 2 :

在此处输入图片说明

我在插入 5 时继续做同样的事情:

在此处输入图片说明

但这很奇怪,我从未见过这样的空节点......而且我不知道它是否尊重一些非常基本的 B 树属性:

  • 每个节点最多有(m-1) 个键,至少有(?(m/2)?-1) 个键,除非一个键可以为空,我会将键理解为“指针”。

第一次尝试:订单上的错误显示一棵不明确的树

一开始我误解了“顺序”是什么(每个节点的最大子节点数)。所以我认为一个节点可以有三个空间(因此有 4 个孩子。我正在创建一个 4 阶树,我认为:

直到插入 1,2,3 :

在此处输入图片说明

插入 4,只要我们必须拆分节点而不是将密钥重新分配给邻居(这似乎是矛盾的),我会让 1,2,3 和 4,5 在 3 之后的右叶上:

插入 4 & 5 后的 3 阶 B 树

btree

11
推荐指数
1
解决办法
918
查看次数

我们可以在 Transact-SQL 中的聚合函数后放置等号 (=) 吗?

我遇到过这样的脚本:

set @sum = sum = (case when somecol1 is null then DATEDIFF(d,[somecol2],somecol3) else 0 end)
Run Code Online (Sandbox Code Playgroud)

我无法理解第二个关键字 sum 后面的等号 (=) 的含义。当我运行查询时,它没有显示任何带有等号和不带等号的错误。

我想知道在关键字后面放一个等号的目的sum。这是错误还是错误?

谢谢

sql-server syntax aggregate t-sql

11
推荐指数
1
解决办法
872
查看次数

我可以无损地分解这张表吗?

我偶然发现了一个我不擅长的数据库设计问题,而我的首选 DBA 大师正在进行消防演习。

本质上,我有一个包含以下主键的表(为简洁起见,PK):

child_id   integer
parent_id  integer
date       datetime
Run Code Online (Sandbox Code Playgroud)

child_idparent_id是实体表的外键。“子”表本身也包含一个到“父”表的外键,而且,每个表child_id总是引用与parent_id上表预期相同的外键。事实上,事实证明有一些额外的代码使两者保持同步。

这使得这个过度热情的规范化新手说“我应该删除冗余!”

我分解为以下内容:

Table_1 PK:
child_id   integer
date       datetime

Table_2 PK:
parent_id  integer
date       datetime

Table_3: (already exists)
child_id   integer PRIMARY KEY
parent_id  integer FOREIGN KEY
Run Code Online (Sandbox Code Playgroud)

瞧,当我以自然的方式将这些人连接在一起时,我恢复了原始表。这是我的理解,使这个 5NF。

然而,现在我意识到有一个隐藏的商业规则。

通常,与给定关联的日期child_id必须是与相应parent_id. 您可以看到第一个表强制执行此规则。

我的分解不强制执行规则,因为您可以自由添加到表 1,直到日期变得太大。

这使我来到这里,有以下问题:

  1. 这是分解5NF吗?虽然我会说它允许插入异常,但它似乎也遵循 Wiki 示例,该示例本身遵循本指南。短语(强调我的)“我们可以从由三种不同记录类型组成的规范化形式重建所有真实事实”给了我特别的停顿,因为无论我注入多少垃圾Table_1,自然连接仍然会忽略它。

  2. 假设我不喜欢这种分解(我不喜欢)。我坦率地承认,实际的解决方案是让表格和代码保持原样。但是,从理论上讲,有没有办法分解和/或添加约束,以便我摆脱第一个表保留我的业务规则?

schema normalization database-design best-practices relational-theory

10
推荐指数
2
解决办法
1018
查看次数

确定哪些值与表行不匹配

我希望能够轻松检查查询中提供的表中不存在哪些唯一标识符。

为了更好地解释,这是我现在要做的,以检查表中不存在列表“1、2、3、4”的哪些 ID:

  1. SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4'),假设该表不包含 ID 为 2 的行。
  2. 将结果转储到 Excel
  3. 在原始列表上运行 VLOOKUP,搜索结果列表中的每个列表值。
  4. 任何导致 的 VLOOKUP#N/A都在表中没有出现的值上。

我认为必须有更好的方法来做到这一点。理想情况下,我正在寻找类似的东西

要检查的列表 -> 查询要检查的表 -> 不在表中的列表成员

sql-server-2005 sql-server except

10
推荐指数
2
解决办法
3万
查看次数

如何在 SQL Server Management Studio 中折叠架构?

我不确定这是否可能,但我希望它是 - 我目前正在运行 SSMS 并且有一个数据库,它的数据全部“存放”在 DBO 模式中。我收到了建议(并且完全同意),最佳实践是创建与我们的业务功能相匹配的其他模式,我将继续推进。

我想知道是否有任何方法 - 即使是通过安装某种加载项,让架构崩溃,以便我可以隐藏所有 DBO 和 RPT 对象,直到我扩展架构 - 很多就像表格和其他文件夹被折叠一样。

如果这个问题不是本网站的“主题”,我深表歉意 - 但我认为这是最有可能知道答案的地方。

在我下面的屏幕截图中 - 我正在寻找要折叠的红色轮廓的位,现在只有 2 行 DBO - 以及我目前请求创建的 RPT:

在此处输入图片说明

sql-server ssms

10
推荐指数
1
解决办法
2462
查看次数

什么是 SQL Server 复制术语中的“散列事务”?

sys.dm_repl_tranhash包含有关交易散列的信息,但我很难理解这些术语。什么是“哈希交易”?

replication sql-server terminology dmv

10
推荐指数
1
解决办法
234
查看次数