数据库模式

数据库模式

Database Patterns

本问题已经有最佳答案,请猛点这里访问。

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

@Gaius,

这是数据库设计人员需要权衡的问题-数据库结构的可能稳定性是什么?在很长一段时间内,没有什么是稳定的。换句话来说,在很长一段时间内,一切都会发生变化。代理键(理论上)永远不要更改其含义,因为它永远都没有意义。

我猜在该特定设计方案中要考虑的另一件事是谁将看到主键?如果主键是最终用户实际需要参考的东西,那么使其成为他们可以理解的东西是有意义的。但是我无法想到最终用户需要看到主键的许多情况。通常,存在主键是为了允许数据库引擎加快某些操作的速度。

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


具体来说,关于键:我强烈不同意这个奇怪的想法,即键必须没有意义。总的来说,我认为数据库是事实的集合。一旦开始向其中添加任意数字(如生成的键)和其他不相关的信息,它应该是一个警告信号。我建议乔·塞尔科(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,"数据建模基础"
http://www.elsevierdirect.com/product.jsp?isbn=9780126445510

也许您实际上正在寻找"样式指南"?在这种情况下:
Joe Celko:SQL编程风格
http://www.elsevierdirect.com/product.jsp?isbn=9780120887972


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

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


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

因此,例如,如果我有一个Invoice表和一个InvoiceDetail表,则可以在第一个表上使用InvoiceNumber作为主键。它已经存在于我们的数据中,并且(我认为?)将是唯一的。对于第二张表,我们可能会需要使用代理键,但是,无论它是否以复合形式连接到发票号。

无论如何,回到最初的问题... hometoast的链接应该可以帮助您入门。

-凯文·费尔柴尔德(Kevin Fairchild)


Bill Karwin撰写的SQL Anti-Patterns非常易于阅读(不干涩),并且以相当清晰的术语解释了许多不同的潜在陷阱,如何使用它们以及如何/为什么做正确的事情。


要确切回答:是的。在"好的"数据库设计上有成千上万的信息。尽管您的经验法则当然值得怀疑。


使用具有业务含义的主键("自然键")当然有其优点,但是它会使重构数据库变得非常困难。请谨慎使用,尤其是在有任何理由相信数据库结构会随着时间而改变的情况下。


推荐阅读

    linux回到命令行模式?

    linux回到命令行模式?,系统,密码,状态,工具,电脑,终端,界面,环境,地方,命令,

    linux命令模式联网?

    linux命令模式联网?,网络,系统,工具,软件,密码,地址,最新,信息,工作,数据,lin

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux命令模式全屏?

    linux命令模式全屏?,系统,工具,电脑,数据,位置,命令,虚拟机,分辨率,字符串,

    linux中回到命令模式?

    linux中回到命令模式?,系统,密码,情况,状态,终端,环境,信息,首页,界面,命令,

    linux命令行模式6?

    linux命令行模式6?,系统,设计,信息,工作,终端,首页,庞大,服务,地方,环境,linu

    linux怎么用命令模式?

    linux怎么用命令模式?,工作,地址,系统,信息,管理,命令,目录,情况,图形界面,

    linux建立数据库命令?

    linux建立数据库命令?,软件,系统,工作,数据,密码,工具,数据库,一致,网络,服

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux插入命令模式?

    linux插入命令模式?,工作,系统,地址,管理,信息,时间,命令,目录,平均,项目,Lin

    命令行模式登陆linux?

    命令行模式登陆linux?,密码,系统,工作,信息,终端,环境,状态,地址,工具,服务,l

    linux进入文档命令?

    linux进入文档命令?,工作,地址,图片,系统,标准,命令,信息,设备,一致,发行,Lin

    linux打开命令模式?

    linux打开命令模式?,系统,密码,管理,情况,终端,命令,工具,信息,地方,电脑,LIN

    linux纯命令模式切换?

    linux纯命令模式切换?,系统,密码,状态,电脑,网络,信息,模式,命令,情况,地方,L

    linux数据库检查命令?

    linux数据库检查命令?,服务,状态,地址,位置,系统,信息,命令,工作,情况,密码,

    linux命令进去数据库?

    linux命令进去数据库?,地址,服务,名字,系统,数据库,工具,基础,工作,管理,网

    linux数据库基础命令?

    linux数据库基础命令?,地址,工作,基础,系统,命令,信息,情况,工具,设备,目录,l

    linux命令底行模式?

    linux命令底行模式?,系统,地址,工作,命令,管理,时间,信息,模式,控制台,图形

    linux上传文档命令?

    linux上传文档命令?,服务,工具,密码,系统,软件,工作,电脑,综合,命令,文件,Lin