查找表(或一些人称之为代码表)通常是可以为特定列给出的可能值的集合。
例如,假设我们有一个名为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) 我们正在尝试blob
使用一个简单的脚本将(二进制数据)从一个数据库复制到另一个数据库。这是我们要做的步骤。
INSERT
脚本中notepad
。我们注意到值现在是一个以ASCII
它开头的值,0x255....
它似乎是数据的hexadecimal
表示binary
。有没有办法在插入过程中将其转换回二进制?
有没有更好的方法来blob
使用脚本复制数据?假设,我们没有直接连接到目标数据库。
有一个名为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
目前我们执行两个查询以使用分页过滤器获取计数和结果。虽然我们可以轻松地将这两者结合到一个网络调用中(使用 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 数据库。然而,在 SQL 中执行此操作并不是一个简单的过程,因为主查询需要额外的输入,而这些输入实际上可以使用另一个查询来获取。我可以在一个查询中完成此操作吗?
SO 已经有一个问题;但解决方案不是很灵活。RESTORE FILELISTONLY
的定义变化非常频繁。即便如此,该解决方案似乎也非常冗长。
是否有更简单的方法将查询结果存储到变量中并使用它们?对于任何编程语言来说,这都是小菜一碟。
获取逻辑名称:
Run Code Online (Sandbox Code Playgroud)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'
的部分解决方案是让所有的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 ×4
foreign-key ×2
backup ×1
blob ×1
constraint ×1
count ×1
postgresql ×1
primary-key ×1
t-sql ×1