24

有谁知道论文/书籍/等。数据库的文档模式?例如,一个常见的经验法则是每个表都应该有一个主键,并且该键应该没有信息内容。所以我想知道是否有人写过关于设计关系数据库的设计模式的书或发表过论文?


@盖乌斯,

这就是数据库设计者需要权衡的问题——数据库结构的可能稳定性是多少?给定一个足够长的视野,没有什么是稳定的。或者反过来说,只要视野足够长,一切都会发生变化。代理键(理论上)不应该改变它的含义,因为它从一开始就没有意义。

我想在那个特定的设计场景中要考虑的另一件事是谁会看到主键?如果主键是最终用户实际需要参考的东西,那么让它成为他们可以理解的东西是有意义的。但是我想不出最终用户需要查看主键的许多情况。通常存在主键以允许数据库引擎加速某些操作。

我最初提出这个问题的想法是找到由比我更有经验的数据库设计人员编写的数据库设计设计模式,以便避免一些容易避免的错误。如果有人曾经编写过数据库设计反模式,那将会很有趣。

4

6 回答 6

10

具体来说,关于键:我强烈不同意键必须没有意义的奇怪想法。一般来说,我认为数据库是事实的集合。一旦您开始向其中添加任意数字(如生成的密钥)和其他不相关的信息,它应该是一个警告信号。我强烈推荐Joe Celko来了解更多关于按键的信息。

更一般的注释:

针对不同业务的模式设计/数据模型的建议:David C. Hay:数据模型模式:思想约定 相当陈旧,但它仍在印刷中是有原因的
http://www.dorsethouse.com/books/dmp。 html

也许不是很像模式,但仍然非常好:Stephane Faroult,Peter Robson:SQL 的艺术 http://oreilly.com/catalog/9780596008949/

我可以推荐的另一个:Vadim Tropashko:SQL 设计模式 - SQL 编程专家指南 http://www.rampant-books.com/book_2006_1_sql_coding_styles.htm

关于数据建模的系统教科书:Graeme Simsion 和 Graham Witt,“Data Modeling Essentials” http://www.elsevierdirect.com/product.jsp?isbn=9780126445510

也许您实际上正在寻找“风格指南”?我就是这样:Joe Celko:SQL 编程风格 http://www.elsevierdirect.com/product.jsp?isbn=9780120887972

于 2008-09-04T18:48:03.143 回答
5

EF Codd 和 CJ Date 的书籍是最明显的答案。我没有读过这本书,但我对作者很熟悉,它可能相当不错。

Lexx de Haan 和 Toon Koppelaars的数据库专业人员应用数学。

于 2008-09-04T17:55:17.573 回答
4

实际上,我认为经验法则通常是尽可能使用自然键而不是代理...

因此,例如,如果我有一个 Invoice 表和一个 InvoiceDetail 表,我们可能可以使用 InvoiceNumber 作为第一个表的主键。它已经存在于我们的数据中并且(我假设?)将是独一无二的。对于第二个表,我们可能会被困在需要一个代理键,但是——不管它是否作为复合键连接到发票编号。

无论如何,回到最初的问题...... hometoast 的链接应该让你开始。

——凯文·费尔柴尔德

于 2008-09-04T17:59:51.057 回答
3

Bill Karwin 的SQL Anti-Patterns非常容易阅读(不是枯燥的),并以相当清晰的术语解释了许多不同的潜在陷阱,您可能会发现自己如何使用它们,以及如何/为什么要正确地做事。

于 2012-10-30T14:06:03.513 回答
1

准确回答:的。有大量关于“好的”数据库设计的信息。尽管您的示例经验法则肯定是有问题的。

于 2008-09-04T17:50:40.737 回答
1

使用具有业务意义的主键(“自然键”)当然有其优点,但它会使重构数据库变得非常困难。请谨慎使用,特别是如果有任何理由相信数据库结构会随着时间而改变。

于 2008-09-04T18:22:02.050 回答