有关规划大型数据库的任何提示

时间:2009-08-21 00:20:56

标签: mysql sql

在构建我的数据库时,我通常会坐在我的裤子旁边。但是,我的新项目需要相当多的计划。我从未上过学校进行数据库开发,因此我没有正式的规划过程培训。

是否有任何好的软件,方法来规划这些事情?

11 个答案:

答案 0 :(得分:8)

如果您不知道自己在做什么,那么在设计架构时,请坚持使用前几个normal forms。当您在以后发现设计错误时,它可以让您比任何其他方法更容易进行更改。

如有疑问,请随时提出意见。可视化数据库设计的最简单方法是使用实​​体关系图(ER Diagrams),它还允许我们在不筛选代码的情况下轻松查看设计的外观。

答案 1 :(得分:8)

E-R Diagrams中绘制内容有助于管理复杂性。

编辑: 让我补充说,还有一些规则/指南可以帮助将E-R图转换成关系模式,还有一些工具可以帮助完成这个过程。

答案 2 :(得分:6)

不要陷入试图预先设计所有事物的陷阱。它根本无法完成。随着项目的进行,您会找到更好的方法来实现您已经实现的功能。当您从项目中获得经验时,您还可以深入了解域名,以及如何最好地设计数据库。

我建议采用敏捷方法。当时设计一点点。当你看到你已经创建的东西本来可以用更好的方式设计,重构那个。 这适用于代码和数据库架构。

然而,有一点需要注意。在重新启动应用程序之后,很容易重构业务逻辑(除非你将业务逻辑放在数据库中 - 你没有。对吗?),在启动后重构数据库要困难得多,因为你必须维护数据。因此,如果您需要将一个字段从一个表移动到另一个表,则需要更改脚本。

因此,当你接近发射时,提前计划可能是一个好主意。但是在开发的早期阶段,我肯定会建议采用敏捷方法。一次创建一个表。一次一个领域。

答案 3 :(得分:3)

您可以将表分隔到不同的磁盘上以加快访问速度(我假设mySQL可以执行此操作)。你可以得到高速磁盘。

也许你的意思很大,很多桌子。这是一个非常大的话题,但你可以从这些开始:

  • 在表格上定义主键
  • 通过定义外键来创建这些表之间的关系
  • 在常用的WHERE字段上创建索引

一些坐在裤子旁边的开发商不会做这样的事情。感谢你提前思考。

Visio可以做关系图。纸和笔也可以。

以下是数据建模主题的一些信息:http://en.wikipedia.org/wiki/Data_modeling

答案 4 :(得分:1)

提前考虑用例和示例代码对我的数据库设计有很大帮助;这是一种测试数据库完整性的好方法,无需编写单个SQL语句。

祝你好运!

答案 5 :(得分:1)

考虑架构版本控制。您将如何随着时间的推移处理数据库架构的更改?您需要迁移或升级数据吗?你能在开发过程中丢掉数据吗?

从早期开始,为测试,登台和现场提供单独的数据库实例。

画出很多照片。

答案 6 :(得分:0)

这是一个存储库模式可以帮助很多的地方,当我很清楚我希望软件如何工作时,我会使用这种模式,但是当我对所涉及的数据缺乏清晰的认识时。通常,创建/重构模拟对象要比修改表和后备存储过程/查询容易得多。

答案 7 :(得分:0)

听起来你已经知道了这一点:但是DB健全性通常需要关联实体(http://en.wikipedia.org/wiki/Associative_Entities)。

答案 8 :(得分:0)

我将从命名约定开始。我使用* _NM(名称)和 _NUM(数字),V _ 作为视图等。

没有什么是惊天动地的,但是当你能猜到自己的表名和行名而不必查看它们时,它确实使你的工作变得更容易。无论你选择什么,只要确保它是明智和一致的。大多数专业DA只使用大写的表名。

就个人而言,我喜欢在每个具有ID(通常是PK)的表上使用ID作为ID,然后将外键关系用作_ID来表示关系。例如,

表学校的PK为ID。

表学生有一个ID为PK的PK和一个引用表SCHOOL,SCHOOL_ID的FK。

因此,在查看没有任何ERD的学生表时,很容易看到SCHOOL_ID引用了SCHOOL.ID,并且在阅读SQL语句时看起来也很好。

关于数据建模工具,Erwin:http://www.ca.com/us/data-modeling.aspx

答案 9 :(得分:0)

因此,在我就如何最好地设计大型架构提出任何建议之前,我需要问一个问题:大型架构是否绝对必要?

您询问是否有任何良好的软件方法来规划大型系统。确实存在,复杂软件开发的最佳方法之一是SOA:面向服务的体系结构。如果您希望自己了解一下数据库级以外的SOA最佳实践,我强烈建议您阅读Thomas Erls的书籍,特别是他的SOA:服务设计原则。我还强烈建议听一些Udi Dahan关于面向服务和域驱动的设计和架构的讲座。这两个人都有很多很好的知识。

说到数据库,在潜入并开发一个非常大的复杂模式之前,请确保您确实真正需要它。在面向服务的环境中,动机是在您尝试解决的业务问题的不同服务之间确定明确的,不可破解的边界。一旦确定了这些边界,就会发现可以在其中创建较小的模式。有时,这会导致数据重复,因为当需要跨越边界时,必须将信息从一个服务发布到另一个服务。但是,拥有几个更小,更简单的模式的好处可能是巨大的。与单一的怪异模式相比,您获得了更大的自主性,可移植性,灵活性和可维护性。

研究SOA,特别是如何在面向服务的体系结构中处理数据库。 Udi Dahan给出的以下演示文稿也应提供一些非常有用的见解:

http://www.vimeo.com/5022174

答案 10 :(得分:0)

使用MySQL的Workbench工具下载和构建数据库。将帮助您构建和维护数据库。