设计模式通常与面向对象设计有关
是否有design patterns用于创建和编程relational databases?
许多问题肯定必须有可重复使用的解决方案。
示例包括表格设计,存储过程,触发器等模式......
是否存在此类模式的在线存储库,类似于martinfowler.com?
模式可以解决的问题示例:
答案 0 :(得分:135)
Martin Fowler的签名系列中有一本名为Refactoring Databases的书。这提供了重构数据库的技术列表。我不能说我已经听过很多数据库模式列表。
我还强烈推荐David C. Hay的Data Model Patterns和后续A Metadata Map,它建立在第一个基础之上,而且更加雄心勃勃,更有趣。前言本身就具有启发性。
Len Silverston的数据模型资源手册系列Volume 1也是寻找一些预制数据库模型的好地方,它包含普遍适用的数据模型(员工,帐户,运输,购买等),{{3} }包含行业特定的数据模型(会计,医疗保健等),Volume 2提供数据模型模式。
最后,虽然本书表面上是关于UML和对象建模的,但是Peter Coad的Volume 3提供了一个“原型”驱动的实体建模过程,其前提是任何对象/数据模型都有4个核心原型< / p>
答案 1 :(得分:127)
这是一个已经开发了数百个免费数据库模式的绅士的链接。
http://www.databaseanswers.org/data_models/
也许如果您必须快速构建数据库,这将为您提供给定模式中的表和关系的起点。请记住,您可能需要修改此起点。我发现它非常有用。
其次,SQL Server Magazine偶尔会出现一个名为“The Data Modeler”的专栏,它非常具有教育意义,通常包含给定系统的完整模式。
答案 2 :(得分:43)
设计模式不是简单的可重用解决方案。
根据定义,设计模式是可重用的。它们是你在其他好的解决方案中检测到的模式。
模式不可重复使用。但是,您可以按照模式实现您的羽绒设计。
关系设计模式包括:
使用外键的一对多关系(主 - 详细信息,父子关系)。
与桥牌表的多对多关系。
在FK列中使用NULL管理的可选一对一关系。
Star-Schema:Dimension and Fact,OLAP design。
完全标准化的OLTP设计。
维度中的多个索引搜索列。
“查找表”,包含一个或多个应用程序使用的PK,描述和代码值。为什么有代码?我不知道,但是当它们必须被使用时,这是一种管理代码的方法。
的Uni-表。 [有人称之为反模式;这是一种模式,有时它很糟糕,有时它很好。]这是一张包含许多违反第二和第三范式的预先加入的表格。
数组表。这是一个通过在列中包含数组或值序列来违反第一范式的表。
混合使用数据库。这是一个针对事务处理进行规范化的数据库,但有许多额外的索引用于报告和分析。这是一种反模式 - 不要这样做。无论如何,人们都会这样做,所以它仍然是一种模式。
大多数设计数据库的人都可以轻易地打破六个“这是另一个”;这些是他们定期使用的设计模式。
这不包括使用和管理的行政和运营模式。
答案 3 :(得分:19)
查看此博客 - The Database Programmer。
他描述了一些database patterns。
答案 4 :(得分:15)
Joe Celko的书非常适合这类东西,特别是“SQL for Smarties”。他对常见问题有一些创新的解决方案,其中大部分都是可重复使用的设计模式。
答案 5 :(得分:6)
AskTom可能是有关Oracle DB最佳实践的最有用的资源。 (我通常只输入“asktom”作为特定主题的谷歌查询的第一个单词)
我认为用关系数据库谈论设计模式并不合适。关系数据库已经是对问题的“设计模式”的应用(问题是“如何在保持其完整性的同时表示,存储和处理数据”,并且设计是关系模型)。其他approches(通常被认为是过时的)是Navigational和Hierarchical模型(我不知道其他许多其他模型)。
话虽如此,您可能会将“数据仓库”视为数据库设计中有些独立的“模式”或方法。特别是,您可能有兴趣阅读Star schema。
答案 6 :(得分:4)
经过多年的数据库开发,我可以说在开始之前你应该回答一些问题和一些问题:
<强>的问题:强>
不使用:
<强> recomendations:强>
我希望这是一个很好的起点。
答案 7 :(得分:1)
你的问题有点模糊,但我认为UPSERT
可以被认为是一种设计模式。对于未实现MERGE
的语言,a number of alternatives to solve the problem(如果存在合适的行,UPDATE
;否则为INSERT
)。
答案 8 :(得分:1)
取决于你对模式的意思。如果您正在考虑Person / Company / Transaction / Product等,那么是 - 已经有很多通用数据库模式可用。
如果您正在考虑Factory,Singleton ......那么不 - 您不需要任何这些,因为它们的DB编程水平太低。
如果您正在考虑数据库对象命名,那么它属于约定类别,而不是设计本身。
BTW,S.Lott,一对多和多对多的关系不是“模式”。它们是关系模型的基本构建块。答案 9 :(得分:0)
Title: Data Patterns
By: Microsoft Corporation
Publisher: Microsoft Press
Pub. Date: December 21, 2004
Print ISBN-13: 978-0-7356-2200-5