设计模式通常与面向对象的设计有关.
是否有用于创建和编程关系数据库的设计模式?
许多问题肯定必须有可重复使用的解决方案.
示例包括表格设计,存储过程,触发器等模式......
是否有类似于martinfowler.com的此类模式的在线存储库?
模式可以解决的问题示例:
最近有很多关于卡桑德拉的谈话.
Twitter,Digg,Facebook等都使用它.
什么时候有意义:
最近NoSQL获得了极大的欢迎.
NoSQL相对于传统RDBMS有哪些优势?
在SQL Server中设置外键时,在什么情况下应该在删除或更新时级联它,背后的原因是什么?
这可能也适用于其他数据库.
我最关注每个场景的具体例子,最好是那些成功使用它们的人.
如何在不使用触发器或以任何方式修改数据库结构的情况下监视SQL Server数据库以查找表的更改?我首选的编程环境是.NET和C#.
我希望能够支持任何SQL Server 2000 SP4或更新版本.我的应用程序是另一家公司产品的螺栓式数据可视化.我们的客户群数以千计,因此我不想在每次安装时都要求我们修改第三方供应商的表.
通过"更改表",我的意思是更改表数据,而不是更改表结构.
最终,我希望更改在我的应用程序中触发事件,而不是必须间隔检查更改.
根据我的要求(没有触发器或模式修改,SQL Server 2000和2005),最好的行动方案似乎是BINARY_CHECKSUM
在T-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)
并将返回的校验和与存储的值进行比较.
什么是数据库约束的明确定义?为什么约束对数据库很重要?有哪些类型的约束?
PostgreSQL中IN
和ANY
运算符有什么区别?
两者的工作机制似乎是一样的.任何人都能用一个例子来解释这个吗
我很惊讶这还没有发布.你在Postgres知道的任何有趣的技巧?晦涩的配置选项和缩放/执行技巧特别受欢迎.
我相信我们可以在相应的MySQL线程上击败9条评论:)
除了是否应该使用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年后我还有很多需要学习的东西.感谢所有为此做出有益讨论的人.
rdbms ×10
database ×5
sql ×5
sql-server ×3
nosql ×2
postgresql ×2
cascade ×1
cassandra ×1
constraints ×1
datatable ×1
foreign-keys ×1
null ×1
sql-in ×1
sqlite ×1
standards ×1