数据库设计技术系列(三)——选择键和目录

 

选择键和目录

  1. 数据采掘要预先计划

自所于的市场机构已经使处理8
万多份联系方式,同时填写每个客户的必不可少数据(这绝对免是小活)。我从中还要确定来同样组客户作为市场目标。当自身自从极度开始设计表和字段的时段,我准备不以主索引里增加极其多的字段以便加速数据库的运行速度。然后自己发现及特定的组查询以及信采掘既未规范速度吗无碍。结果只好在主索引中重建而且合并了数码字段。我意识有一个指令计划相当重要——当我怀念创立系统项目查找时怎么要运号码当主索引字段为?我可以为此传真号码进行搜索,但是它们几乎就象系统项目一样对己来说并无紧要。采用后者作为主字段,数据库更新后又索引和查找就尽快多矣。

— hscovell

而是操作数据仓库(ODS)和数据仓库(DW)这半种环境下之多少索引是发差异的。在DW
环境下,你只要考虑销售单位是哪组织销售移动的。他们并无是数据库管理员,但是她们规定表内的键信息。这里设计人员要数据库工作人员应该分析数据库结构从而确定有性能和对输出之间的特等条件。

— teburlew

  1. 使系统生成的主键

顿时无异于天接近及技术1,但自己以为出必不可少当这边再次提醒大家。假如你连在规划数据库的上用系统生成的键作为主键,那么你实在决定了数据库的目完整性。这样,数据库和不人工机制就算使得地控制了对存储数据遭到列一行的拜会。

使系统生成键作为主键还有一个长:当您持有同样的键结构时,找到逻辑缺陷很轻。

— teburlew

  1. 释疑字段用于索引

为分离命名字段和含字段以支持用户定义的表,请考虑分解其他字段(甚至主键)为那构成要素以便用户可本着那进展索引。索引将加快SQL
和表格生成器脚本的行进度。比方说,我一般在得利用SQL LIKE 表达式的情形下创办报表,因为 case number 字段无法说明为year、serial number、case type 和defendant code
等元素。性能为会见更换充分。假如年度以及花色字段可以解释为寻引字段那么这些报表运行起来就是见面尽快多矣。

— rdelval

  1. 键设计4 原则

· 为涉及字段创建外键。

· 所有的键都必须唯一。

· 避免用复合键。

· 外键总是关联唯一的键字段。

— Peter Ritchie

  1. 转忘了目录

目录是由数据库中获取数据的极致快捷方式有。95%之数据库性能问题都可行使索引技术得到缓解。作为同一长达规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对另外键列下非成组索引。不过,索引就象是盐,太多矣菜肴就是篌了。你得考虑数据库的半空中有差不多百般,表如何开展访问,还有这些访问是否主要为此作读写。

— tduvall

多数数据库都引得自动创建的主键字段,但是可转忘了目录外键,它们为是常常应用的键,比如运行查询显示主表和有关联表的某个修记下就是用得上。还有,不要索引memo/note
字段,不要索引大型字段(有成百上千字符),这样作会受索引占用太多的储存空间。

— gbrayton

  1. 毫无索引常用之小型表

绝不也微型数据表设置任何键,假如它们经常发出插入和去操作就更别这样作了。对这些插入和去操作的目维护或于扫描表空间消耗又多的辰。

— kbpatel

  1. 并非将社会保障号码(SSN)选作键

永远都无须采用SSN
作为数据库的键。除了隐私原因之外,须知政府更趋向于无许可把SSN 用作除收入有关外的另外目的,SSN
需要手工输入。永远不要用手工输入的键作为主键,因为一旦您输入错误,你唯一会召开的即使是删除所有记录然后从头开始。

— teburlew

上个世纪70
年代我还当念大学之时光,我记忆当时SSN
还曾经给用做学号,当然尽管这样做是不法的。而且人们也还懂这是地下的,但她俩一度习惯了。后来,随着盗取身份犯罪案件的长,我本底大学校园正痛苦地从同格外摊数据中管SSN 删除。

— generalist

  1. 毫不因此用户的键

于规定下什么字段作为表底键的下,可自然要是小心用户将编辑的字段。通常的状下未苟选取用户可编制的字段作为键。这样做会迫使你下以下简单单点子:

·
在开创记录下对用户编辑字段的所作所为施加限制。假如你这么做了,你恐怕会见意识你的应用程序在商务需求突然发生变化,而用户需编制那些不可编辑的字段时少足够的灵活性。当用户以输入数据以后直到保存记录才察觉系来了问题她们该怎么想?删除重建?假如记录不可重建是否为用户走起来?

·
提出一些检测及纠正键冲突的艺术。通常,费点精力为便为定矣,但是自性质及来拘禁这样做的代价就是于坏了。还有,键的纠正或者会见迫使你突破你的数与买卖/用户界面层之间的隔离。所以还是重新提一句古语:你的计划性要适于用户如不是给用户来适应你的筹划。

— Lamont Adams

切莫深受主键具有可更新性的由是在涉及模式下,主键实现了不同表之间的关系。比如,

Customer 表有一个主键CustomerID,而客户的定单则存放于外一个表里。Order 表的主键可能

凡OrderNo 或者OrderNo、CustomerID
和日期的咬合。不管而挑哪种键设置,你都需要在Order 表中存放CustomerID
来管你可被下定单的用户找到该定单记录。

假若你当Customer 表里窜了CustomerID,那么您不能不找来Order
表中的装有相关记录对那进展改动。否则,有些定单就见面不属其他客户——数据库的完整性就算完蛋了。

若是搜索引完整性规则施加到说明一级,那么以匪修大量代码和附加删除记录的动静下几无可能变动有平等长条记下的键和数据库内具备涉嫌的笔录。而立无异过程反复错误丛生所以应该尽量避免。

— ljboast

  1. 然选键有时只是做主键

记住,查询数据的免是机而是人。

一经你发可选键,你也许更把它因此做主键。那样的话,你便拥有了树强有力索引的力。这样可以阻挡使用数据库的总人口只好连续数据库从而恰当的过滤数据。在严格控制域表的数据库及,这种负荷是较明显的。如果只是选键真正发出因此,那就是是达了主键的档次。

本人之意是,假如你发出可选键,比如国家表内的state_code,你不用当现有不克改的唯一键直达创办后续的键。你如做的光是开创毫无价值的数额。比如以下的例证:

Select count(*)

from address, state_ref

where

address.state_id = state_ref.state_id

and state_ref.state_code = ‘TN’

本人之做法是如此的:

Select count(*)

from address

where

and state_code = ‘TN’

设您因过于使用表的后续键建立这种表的涉,操作负载真得要考虑一下了。

— Stocker

  1. 转变忘了外键

多数数据库索引自动创建的主键字段。但别忘了目录外键字段,它们以你想查询主表中的记录及其关系记录时老是都见面为此到。还有,不要索引memo/notes
字段而且并非索引大型文本字段(许多字符),这样做会吃你的目占据大量的数据库空间。。

— gbrayton

__

发表评论

电子邮件地址不会被公开。 必填项已用*标注