小编Nis*_*ant的帖子

在关系数据库中查找表的最佳实践是什么?

查找表(或一些人称之为代码表)通常是可以为特定列给出的可能值的集合。

例如,假设我们有一个名为party(用于存储有关政党的信息)的查找表,它有两列:

  • party_code_idn,它保存系统生成的数值,并且(缺乏业务领域含义)用作真实键的代理。
  • party_code, 是表的真实或“自然”键,因为它维护具有业务领域内涵的值。

让我们说这样的表保留了以下数据:

 +----------------+------------+
 | party_code_idn | party_code |
 +----------------+------------+
 |              1 | Republican |
 |              2 | Democratic |
 +----------------+------------+
Run Code Online (Sandbox Code Playgroud)

party_code列,这使价值“共和”和“民主”,在工作台的真正的关键,是建立了一个独特的约束,但我需要添加的party_code_idn,它定义为表(的PK虽然,从逻辑上说,party_code可以作为 PRIMARY KEY [PK])。

指向事务表中的查找值的最佳实践是什么?我应该建立外键 (FK) 引用(a)直接指向自然和有意义的值还是(b)代理值?

选项(a),例如,

 +---------------+------------+---------+
 | candidate_idn | party_code |  city   |
 +---------------+------------+---------+
 |             1 | Democratic | Alaska  |
 |             2 | Republican | Memphis …
Run Code Online (Sandbox Code Playgroud)

foreign-key database-design best-practices primary-key

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

如何使用脚本将 blob(二进制数据)从一个 DB 复制到 DB?

我们正在尝试blob使用一个简单的脚本将(二进制数据)从一个数据库复制到另一个数据库。这是我们要做的步骤。

  1. 使用 MSSQL Studio 客户端选择值。
  2. 将其复制到剪贴板。
  3. 使用 将其粘贴到INSERT脚本中notepad
  4. 将其应用到目标数据库中。

我们注意到值现在是一个以ASCII它开头的值,0x255....它似乎是数据的hexadecimal表示binary。有没有办法在插入过程中将其转换回二进制?

有没有更好的方法来blob使用脚本复制数据?假设,我们没有直接连接到目标数据库。

sql-server blob

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

外键有额外的约束?

有一个名为Item(id, name, cost)and的表Orders(id, bill_id, item_id, units),用于跟踪所下的订单,其中相同的bill_id表示它属于单个订单。

如果需要在Order表中添加item_id,如何在 DB 中施加一个额外的约束,表明Item应该是“可用的”(在那个时间点)?在这种情况下,项目被手动确定为“可用”并且不能从数据库中的其他字段派生。

一种模式设计(我更喜欢)是添加一个类型列,该列将具有“可用”和“不可用”字段。但是如何检查外键约束item_id不仅应该是Item表中的主键,其类型也应该是“可用”?

这个使用检查约束的堆栈溢出答案似乎很接近,但这是唯一的方法吗?我觉得这对于 RDBMS 来说是一件小事,或者这不是规范化的数据?

其他架构设计(我不喜欢)是有一个表称为“菜单”,这可能具有唯一项目可用。问题是这张桌子本质上是非常动态的,它会根据物品的可用性不断变化。而且,我只是根据项目的状态从项目中创建一个子集表,这似乎不是一个好主意。

以编程方式执行此操作很容易;但是,我如何在 RDBMS 中实现这一点?我喜欢数据库足够智能来处理这个的想法。

postgresql foreign-key database-design constraint check-constraints

7
推荐指数
1
解决办法
1186
查看次数

在主查询中包括结果计数?

目前我们执行两个查询以使用分页过滤器获取计数和结果。虽然我们可以轻松地将这两者结合到一个网络调用中(使用 sql 分隔符),但有没有办法在遵循DRY原则的单个查询中做到这一点?

-- count    
SELECT COUNT(*) FROM table;

-- result with pagination
SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY tbl.idn) AS row, * FROM tbl)_tbl
WHERE row >= 1 AND row <= 10;
Run Code Online (Sandbox Code Playgroud)

维护两个查询真的很有挑战性——单个查询减少了维护开销。

sql-server count

5
推荐指数
1
解决办法
3134
查看次数

有没有办法从备份文件中检索逻辑文件名?

我想编写一个自动化脚本来从备份文件恢复 SQL Server 数据库。然而,在 SQL 中执行此操作并不是一个简单的过程,因为主查询需要额外的输入,而这些输入实际上可以使用另一个查询来获取。我可以在一个查询中完成此操作吗?

SO 已经有一个问题;但解决方案不是很灵活RESTORE FILELISTONLY的定义变化非常频繁。即便如此,该解决方案似乎也非常冗长。

是否有更简单的方法将查询结果存储到变量中并使用它们?对于任何编程语言来说,这都是小菜一碟。

获取逻辑名称:

RESTORE FILELISTONLY
FROM DISK = 'D:SourceBackUpFile.bak'
GO
Run Code Online (Sandbox Code Playgroud)

恢复数据库:

RESTORE DATABASE DBName
FROM DISK = 'D:SourceBackUpFile.bak'
WITH RECOVERY
MOVE 'SourceMDFLogicalName' TO 'D:TargetMDFFile.mdf',
MOVE 'SourceLDFLogicalName' TO 'D:TargetLDFFile.ldf'
Run Code Online (Sandbox Code Playgroud)

sql-server backup t-sql

5
推荐指数
1
解决办法
3491
查看次数

验证 HTML 输入字符串

的部分解决方案是让所有的Notes (VARCHAR)地方有一个不平衡<>。但是我怎么能写一个查询呢?

例如:

Input: <html>Hello World</html>
Output: Valid HTML

Input: <html><Hello World</html>
Output: Invalid HTML

Input: <html><Hello World></html>
Output: Valid HTML (Marking it Valid is OK for my use case)
But hey isn't that a valid HTML? It could be <name attribute>
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来检查“无效”HTML,其中“无效”被定义为 HTML 内容,<后面跟着一些HTML Element根据规范无效的字符?

最初我以为我可以检查<name后跟一个(空格),但 HTML 属性的语法为 as<name attribute>在最后关闭。

sql-server

3
推荐指数
1
解决办法
205
查看次数