标签: rdbms

关系数据库设计模式?

设计模式通常与面向对象的设计有关.
是否有用于创建和编程关系数据库的设计模式
许多问题肯定必须有可重复使用的解决方案.

示例包括表格设计,存储过程,触发器等模式......

是否有类似于martinfowler.com的此类模式的在线存储库?


模式可以解决的问题示例:

  • 存储分层数据(例如,具有类型的单个表与具有1:1密钥和差异的多个表...)
  • 存储具有可变结构的数据(例如,通用列vs xml vs分隔列...)
  • 非规范化数据(如何以最小的影响做到这一点......等等)

rdbms database-design design-patterns

273
推荐指数
6
解决办法
10万
查看次数

什么时候不使用Cassandra?

最近有很多关于卡桑德拉的谈话.

Twitter,Digg,Facebook等都使用它.

什么时候有意义:

  • 用Cassandra,
  • 不要使用Cassandra,而且
  • 使用RDMS而不是Cassandra.

database rdbms cassandra nosql

191
推荐指数
9
解决办法
9万
查看次数

NoSql vs Relational数据库

最近NoSQL获得了极大的欢迎.

NoSQL相对于传统RDBMS有哪些优势?

database rdbms database-design relational-database nosql

156
推荐指数
4
解决办法
11万
查看次数

何时/为何在SQL Server中使用级联?

在SQL Server中设置外键时,在什么情况下应该在删除或更新时级联它,背后的原因是什么?

这可能也适用于其他数据库.

我最关注每个场景的具体例子,最好是那些成功使用它们的人.

sql-server rdbms database-design cascade foreign-keys

146
推荐指数
9
解决办法
9万
查看次数

检查SQL Server表的更改?

如何在不使用触发器或以任何方式修改数据库结构的情况下监视SQL Server数据库以查找表的更改?我首选的编程环境是.NET和C#.

我希望能够支持任何SQL Server 2000 SP4或更新版本.我的应用程序是另一家公司产品的螺栓式数据可视化.我们的客户群数以千计,因此我不想在每次安装时都要求我们修改第三方供应商的表.

通过"更改表",我的意思是更改表数据,而不是更改表结构.

最终,我希望更改在我的应用程序中触发事件,而不是必须间隔检查更改.


根据我的要求(没有触发器或模式修改,SQL Server 2000和2005),最好的行动方案似乎是BINARY_CHECKSUMT-SQL中使用该函数.我计划实施的方式是这样的:

每隔X秒运行以下查询:

SELECT CHECKSUM_AGG(BINARY_CHECKSUM(*))
FROM sample_table
WITH (NOLOCK);
Run Code Online (Sandbox Code Playgroud)

并将其与存储值进行比较.如果值已更改,请使用查询逐行遍历表:

SELECT row_id, BINARY_CHECKSUM(*)
FROM sample_table
WITH (NOLOCK);
Run Code Online (Sandbox Code Playgroud)

并将返回的校验和与存储的值进行比较.

sql sql-server datatable rdbms

137
推荐指数
8
解决办法
6万
查看次数

什么是数据库约束?

什么是数据库约束的明确定义?为什么约束对数据库很重要?有哪些类型的约束?

sql sql-server rdbms constraints

86
推荐指数
3
解决办法
16万
查看次数

PostgreSQL中的IN vs ANY运算符

PostgreSQL中INANY运算符有什么区别?
两者的工作机制似乎是一样的.任何人都能用一个例子来解释这个吗

sql database postgresql rdbms sql-in

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

删除所有表命令

删除SQLite中所有表的命令是什么?

同样,我想删除所有索引.

sql database sqlite rdbms

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

PostgreSQL的隐藏功能

我很惊讶这还没有发布.你在Postgres知道的任何有趣的技巧?晦涩的配置选项和缩放/执行技巧特别受欢迎.

我相信我们可以在相应的MySQL线程上击败9条评论:)

database postgresql rdbms postgresql-9.3

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

标准使用'Z'而不是NULL来表示丢失的数据?

除了是否应该使用NULL之外的参数:我负责使用NULL表示"丢失或从未输入"数据的现有数据库.它与空字符串不同,这意味着"用户设置此值,并且他们选择'空'."

该项目的另一个承包商坚定地认为"对我来说不存在NULL;我从不使用NULL,其他任何人都不应该,"论证的一方.然而,令我感到困惑的是,由于承包商的团队确认"丢失/从未输入"和"故意空白或用户指示为未知"之间的区别,他们在整个代码和存储过程中使用单个字符"Z".在整个数据库的其余部分表示"缺少/从未输入",其含义与NULL相同.

虽然我们的共享客户要求更改此项,并且我已经支持此请求,但团队认为这是比我更先进的DBA中的"标准做法"; 他们不愿意根据我的无知请求单独更改为使用NULL.那么,任何人都可以帮助我克服自己的无知吗?在SQL专家中是否有任何标准或小组的个人,甚至是一个大声的声音,主张使用'Z'代替NULL?

更新

我得到了承包商的回复.以下是当客户要求删除特殊值以在没有数据的列中允许NULL时他说的话:

基本上,我设计数据库以尽可能避免NULL.这是基本原理:

字符串[VARCHAR]字段中的NULL永远不是必需的,因为空(零长度)字符串提供完全相同的信息.

整数字段中的NULL(例如,ID值)可以通过使用数据中永远不会出现的值来处理(例如,对于整数IDENTITY字段,为-1).

日期字段中的NULL很容易导致日期计算的复杂化.例如,在计算日期差异的逻辑中,例如[RecoveryDate]和[OnsetDate]之间的天数差异,如果一个或两个日期为NULL,逻辑将会爆炸 - 除非明确考虑两个日期为NULL.这是额外的工作和额外的处理.如果[RecoveryDate]和[OnsetDate]使用"default"或"placeholder"日期(例如,"1/1/1900"),则数学计算可能会显示"异常"值 - 但日期逻辑不会爆炸.

传统上,NULL处理是开发人员在存储过程中出错的一个领域.

在我担任DBA的15年中,我发现尽可能避免使用NULL.

这似乎证实了对这个问题的主要负面反应.不使用接受的6NF方法来设计NULL,而是使用特殊值来"尽可能避免使用NULL".我以开放的心态发布了这个问题,我很高兴我学到了更多关于"NULLs is useful/NULLs is evil"的讨论,但我现在很乐意将"特殊值"方法标记为完全无稽之谈.

一个空的(零长度)字符串提供完全相同的信息.

不,它没有; 在我们正在修改的现有数据库中,NULL表示"从未输入",空字符串表示"输入为空".

传统上,NULL处理是开发人员在存储过程中出错的一个领域.

是的,但成千上万的开发人员已经成功地做了数千次错误,并且已知并记录了避免这些错误的经验和警告.正如这里提到的:无论你是接受还是拒绝NULL,缺失值的表示都是一个解决的问题.没有必要发明新的解决方案只是因为开发人员继续做出易于克服(且容易识别)的错误.


作为一个脚注:我已经成为一名DBE和开发人员超过20年(这当然足以让我知道数据库工程师和数据库管理员之间的差异).在我的整个职业生涯中,我一直都在"NULLs是有用的"阵营,虽然我知道几个非常聪明的人不同意.我对"特殊价值观"的方法持怀疑态度,但对于"如何避免正确的方式"的学术问题却不够精通,无法做出坚定的立场.我一直喜欢学习新东西 - 20年后我还有很多需要学习的东西.感谢所有为此做出有益讨论的人.

sql null standards rdbms database-design

76
推荐指数
6
解决办法
3110
查看次数