- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库设计的 7 个常见错误
理论说得够多了!通过实例来学习数据库建模
为何要 论错误?
优秀数据库设计的艺术就像游泳。入手相对容易,精通则很困难。如果你想学习设计数据库
,一定得有一些理论背景,比如关于数据库设计范式和事务隔离级别的知识。但你还应该尽可能
地多加练习,因为可悲的事实就是,我们在犯错中学习得更多。
本文中,通过展示在设计数据库时常犯的一些错误,我们尝试把学习数据库设计变得容易
一点。
注意,我们假定读者了解数据库范式并知道一点关系数据库的基础知识,因而不会去 论数
据库规范化。只要有可能,文中所涵盖的主题都将使用 Vertabelo 建模和实例来说明。
本文涵盖了设计数据库的各个方面,但着重于Web应用,因此有些例子可能是特定于web应
用程序的。
模型设计
假设我们想要为一个在线书城设计数据库。该系统应当允许用户执行以下活动:
通过书名、描述和作者信息浏览与搜索书籍,阅读后对书籍添加评论和评级,定购书籍,查
看订单处理的状态。
那么最开始的数据库模型可能如下所示:
æ ´å¤ ç²¾å½©æ »ç ¥è®¿é ® 1
为了测试该模型,我们使用Vertabelo为其生成SQL,并且在PostgreSQL RDBMS 中创建一个
新的数据库。
该数据库有8张表,其中没有数据。我们已经往里面填充了一些人工生成的测试数据。现在数
据库里包含了一些示范数据,准备好开始模型检查了,包括识别那些现在不可见但将来在真实用
户使用时会出现的潜在问题。
1 —— 使用无效的名称
你可以在上面的模型中看到我们用“order”命名了一张表。不过,或许你还记得,“order”
在SQL中是保留字! 因此如果你试图发起一个SQL查询:
数据库管理系统将会抗议。很幸运,在PostgreSQL中用双引号把表名包裹起来就行了,语句
仍可以执行:
等等,可是这里的“order”是小写!
没错,这值得深究。如果你在SQL中用双引号把什么包了起来,它就变成分隔标识符,大多
数数据库将以区分大小写的方式解释它。由于“order” 是SQL中的保留字,Vertabelo生成SQL会自
动把order用双引号包起来:
但是由于标识符被双引号包裹且是小写,表名仍然是小写。现在如果你希望事情变得更复杂
æ ´å¤ ç²¾å½©æ »ç ¥è®¿é ® 2
,我可以创建另一个表,这次把它名为ORDER (大写),PostgreSQL不会检测到命名冲突:
如果一个标识符没有被双引号包裹,它就被称作“普通标识符”,在被使用前自动被转成大写—
—这是SQL 9 标准所要求的。但是标识符如果被双引号包裹
——就被称作“分隔标识符”——要求被保持原样。
底线就是——不要使用关键字来当做对象名称。永远不要。
你知道Oracle 中名称长度上限是30个字符吗?
关于给表以及数据库其他元素命好名——这里命好名的意思不仅是“不与SQL关键字冲突”,还
包括是自解释的且容易记住——这一点常常被严重低估。在一个小型数据库中,比如我们这个,
命名其实并不是件非常重要的事。但是当你的数据库增长到100、 00或者500张表,你就会知道
在项目的生命周期中为保证模型的可维护性,一致和直观的命名至关重要。
记住你不光是给表和列命名,还包括索引、约束和外键。你应当建立命名约定来给这些数据
库对象命名。记住名字的长度也是有限制的。如果你给索引命名太长,数据库也会抗议。
提示:
让你的数据库中的名字:尽可能短,直观,尽可能正确和具有描述性,保持一致性;避免使
用SQL和数据库引擎特定的关键字作为名字;建立命名约定;
以下是把order表重命名为purchase后的模型:
æ ´å¤ ç²¾å½©æ »ç ¥è®¿é ® 3
模型中的改变如下:
——列的宽度不足
让我们进一步来看这个模型。如我们所看到的,在book_comment表中,comment列的类
型是1000个以内的字符。这意味着什么?
假设这个字段
您可能关注的文档
最近下载
- 每月骨科科室质控小组工作记录.docx VIP
- 小码王CPA图形化编程二级试题打卡-第3天.docx VIP
- 新闻写作题库.docx VIP
- EN ISO 6506-1-2014 金属材料 布氏硬度试验 第1 部分:试验方法(中文).pdf
- 中国科技大学并行计算(结构-算法-编程)课程精讲PDF合辑(共617页).pdf
- 2018年第一期新任网点负责人政策资源考试.docx VIP
- 福州大学硕士研究生入学考试2011年有机化学考研真题.pdf VIP
- 全国青少年软件编程(Scratch)四级等级测试.docx VIP
- 工伤保险待遇申报表2025年.docx VIP
- python等级考试四级.docx VIP
原创力文档


文档评论(0)