首页 文章

关系数据库设计模式?

提问于
浏览
254

设计模式通常与面向对象的设计有关 .
Are there design patterns for creating and programming relational databases?
许多问题肯定必须有可重复使用的解决方案 .

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

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


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

  • 存储分层数据(例如,单个表与类型与多个表,1:1键和差异...)

  • 存储具有可变结构的数据(例如,通用列vs xml vs分隔列...)

  • 非规范化数据(如何以最小的影响做到这一点,等等......)

10 回答

  • 0

    经过多年的数据库开发,我可以说在开始之前你应该回答一些问题和一些问题:

    questions:

    • 你想在未来使用另一个DBMS吗?如果是,则不使用当前DBMS的特殊SQL内容 . 删除应用程序中的逻辑 .

    Does not use:

    表名和列名中有

    • 个空格

    • 表和列名称中的非Ascii字符

    • 绑定到特定的小写或大写 . 并且永远不要使用仅与小写和大写不同的2个表或列 .

    • 不对表名或列名使用SQL关键字,如"FROM","BETWEEN","DELETE"等

    recomendations:

    • 使用NVARCHAR或等效的unicode支持,然后您对代码页没有任何问题 .

    • 为每列提供唯一名称 . 这使得连接更容易选择列 . 如果每个表都有一列"ID"或"Name"或"Description",则非常困难 . 使用XyzID和AbcID .

    • 对复杂的SQL表达式使用资源包或等号 . 它使切换到另一个DBMS变得更加容易 .

    • 不对任何数据类型进行强制转换 . 另一个DBMS不能具有此数据类型 . 例如,Oracle daes没有SMALLINT只有一个数字 .

    我希望这是一个很好的起点 .

  • 1

    看看这个博客 - The Database Programmer .

    他描述了一些database patterns .

  • 41

    取决于你对模式的意思 . 如果您正在考虑Person / Company / Transaction / Product等,那么是 - 已经有很多通用数据库模式可用 .

    如果您正在考虑Factory,Singleton ......那么不 - 您不需要任何这些,因为它们的DB编程水平太低 .

    如果您正在考虑数据库对象命名,那么它属于约定类别,而不是设计本身 .

    BTW,S.Lott,一对多和多对多的关系不是“模式” . 它们是关系模型的基本构建块 .

  • 4

    Joe Celko的书很适合这类东西,特别是“SQL for Smarties” . 他对常见问题有一些创新的解决方案,其中大部分都是可重复使用的设计模式 .

    http://www.celko.com/books.htm

  • 126

    's a book in Martin Fowler'签名系列名为Refactoring Databases . 这提供了重构数据库的技术列表 . 我能够非常清楚地听到一个数据库模式列表 .

    我还强烈推荐David C. Hay的Data Model Patterns和后续的A Metadata Map,它 Build 在第一个并且更加雄心勃勃和有趣 . 仅前言就是有启发性的 .

    Len Silverston的数据模型资源书系列Volume 1包含普遍适用的数据模型(员工,账户,运输,购买等),也是寻找一些预先数据库模型的好地方,Volume 2包含行业特定的数据模型(会计,医疗保健,等),Volume 3提供数据模型模式 .

    最后,虽然本书表面上是关于UML和对象建模的,但是Peter Coad的Modeling in Color With UML提供了一个实体建模的驱动过程,其前提是任何对象/数据模型都有4个核心原型 .

  • 15

    This book looks interesting

    Title: Data Patterns
    By: Microsoft Corporation
    Publisher: Microsoft Press
    Pub. Date: December 21, 2004
    Print ISBN-13: 978-0-7356-2200-5
    
  • 1

    AskTom可能是有关Oracle DB最佳实践的最有用的资源 . (我通常只输入"asktom"作为特定主题的谷歌查询的第一个单词)

    我认为用关系数据库谈论设计模式并不合适 . 关系数据库已经是对问题的“设计模式”的应用(问题是“如何在保持其完整性的同时表示,存储和处理数据”,并且设计是关系模型) . 其他approches(通常被认为是过时的)是Navigational和Hierarchical模型(我不知道其他许多其他模型) .

    话虽如此,您可能会认为"Data Warehousing"在数据库设计中有点独立"pattern"或方法 . 特别是,您可能有兴趣阅读Star schema .

  • 6

    你的问题有点模糊,但我认为UPSERT可以被认为是一种设计模式 . 对于未实现 MERGE 的语言,a number of alternatives to solve the problem(如果存在合适的行, UPDATE ;否则 INSERT )存在 .

  • 19

    设计模式不是简单的可重用解决方案 .

    根据定义,设计模式是可重用的 . 它们是您在其他好的解决方案中检测到的模式 .

    一种模式并非简单的可重复使用 . 但是,您可以按照模式实现羽绒设计 .

    关系设计模式包括:

    • 使用外键的一对多关系(主 - 细节,父 - 子)关系 .

    • 与桥表的多对多关系 .

    • 在FK列中使用NULL管理的可选一对一关系 .

    • Star-Schema:Dimension and Fact,OLAP设计 .

    • 完全标准化的OLTP设计 .

    • 维度中的多个索引搜索列 .

    • “查找表”,包含一个或多个应用程序使用的PK,描述和代码值 . 为什么有代码?我不知道,但是当它们必须被使用时,这是一种管理代码的方法 .

    • Uni-table . [有人称之为反模式;这是一种模式,有时它很糟糕,有时它很好 . ]这是一张包含许多违反第二和第三范式的预先加入的东西的表格 .

    • 数组表 . 这是一个通过在列中包含数组或值序列来违反第一范式的表 .

    • 混合使用数据库 . 这是一个针对事务处理进行规范化的数据库,但有许多额外的索引用于报告和分析 . 这是一种反模式 - 不要这样做 . 无论如何人们都这样做,所以它仍然是一种模式 .

    大多数设计数据库的人都可以轻易地打破六个“这是另一个”;这些是他们定期使用的设计模式 .

    这不包括使用和管理的管理和运营模式 .

  • 127

    这是一个已经开发了数百个免费数据库模式的绅士的链接 .

    http://www.databaseanswers.org/data_models/

    也许如果您必须快速构建数据库,这将为您提供给定模式中的表和关系的起点 . 请记住,您可能需要修改此起点 . 我发现它非常有用 .

    其次,SQL Server Magazine偶尔会出现一个名为“The Data Modeler”的专栏,它非常具有教育意义,通常包含给定系统的完整模式 .

相关问题