`

数据库设计 - 键和索引

阅读更多
1. 数据采掘要预先计划
我所在的市场部门一度要处理8 万多份联系方式,同时填写每个客户的必要数据(这绝对不是小
活)。我从中还要确定出一组客户作为市场目标。当我从最开始设计表和字段的时候,我试图不
在主索引里增加太多的字段以便加快数据库的运行速度。然后我意识到特定的组查询和信息采掘
既不准确速度也不快。结果只好在主索引中重建而且合并了数据字段。我发现有一个指示计划相
当关键——当我想创建系统类型查找时为什么要采用号码作为主索引字段呢?我可以用传真号码
进行检索,但是它几乎就象系统类型一样对我来说并不重要。采用后者作为主字段,数据库更新
后重新索引和检索就快多了。
— hscovell

可操作数据仓库(ODS)和数据仓库(DW)这两种环境下的数据索引是有差别的。在DW 环境
下,你要考虑销售部门是如何组织销售活动的。他们并不是数据库管理员,但是他们确定表内的
键信息。这里设计人员或者数据库工作人员应该分析数据库结构从而确定出性能和正确输出之间
的最佳条件。
— teburlew

2. 使用系统生成的主键
这一天类同技巧1,但我觉得有必要在这里重复提醒大家。假如你总是在设计数据库的时候采用
系统生成的键作为主键,那么你实际控制了数据库的索引完整性。这样,数据库和非人工机制就
有效地控制了对存储数据中每一行的访问。
采用系统生成键作为主键还有一个优点:当你拥有一致的键结构时,找到逻辑缺陷很容易。
— teburlew

3. 分解字段用于索引
为了分离命名字段和包含字段以支持用户定义的报表,请考虑分解其他字段(甚至主键)为其组
成要素以便用户可以对其进行索引。索引将加快SQL 和报表生成器脚本的执行速度。比方说,
我通常在必须使用SQL LIKE 表达式的情况下创建报表,因为 case number 字段无法分解为
year、serial number、case type 和defendant code 等要素。性能也会变坏。假如年度和类型字
段可以分解为索引字段那么这些报表运行起来就会快多了。
— rdelval

4. 键设计4 原则
· 为关联字段创建外键。
· 所有的键都必须唯一。
· 避免使用复合键。
· 外键总是关联唯一的键字段。

— Peter Ritchie

5. 别忘了索引
索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到
解决。作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用
唯一的非成组索引,对任何外键列采用非成组索引。不过,索引就象是盐,太多了菜就篌了。你
得考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。
— tduvall

大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比
如运行查询显示主表和所有关联表的某条记录就用得上。还有,不要索引memo/note 字段,不
要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。
— gbrayton

6. 不要索引常用的小型表
不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和
删除操作的索引维护可能比扫描表空间消耗更多的时间。
— kbpatel

7. 不要把社会保障号码(SSN)选作键
永远都不要使用SSN 作为数据库的键。除了隐私原因以外,须知政府越来越趋向于不准许把
SSN 用作除收入相关以外的其他目的,SSN 需要手工输入。永远不要使用手工输入的键作为主
键,因为一旦你输入错误,你唯一能做的就是删除整个记录然后从头开始。
— teburlew

上个世纪70 年代我还在读大学的时候,我记得那时SSN 还曾被用做学号,当然尽管这么做是非
法的。而且人们也都知道这是非法的,但他们已经习惯了。后来,随着盗取身份犯罪案件的增
加,我现在的大学校园正痛苦地从一大摊子数据中把SSN 删除。
— generalist

8. 不要用用户的键
在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要
选择用户可编辑的字段作为键。这样做会迫使你采取以下两个措施:
· 在创建记录之后对用户编辑字段的行为施加限制。假如你这么做了,你可能会发现你的应用程
序在商务需求突然发生变化,而用户需要编辑那些不可编辑的字段时缺乏足够的灵活性。当用
户在输入数据之后直到保存记录才发现系统出了问题他们该怎么想?删除重建?假如记录不可
重建是否让用户走开?
· 提出一些检测和纠正键冲突的方法。通常,费点精力也就搞定了,但是从性能上来看这样做的
代价就比较大了。还有,键的纠正可能会迫使你突破你的数据和商业/用户界面层之间的隔
离。
所以还是重提一句老话:你的设计要适应用户而不是让用户来适应你的设计。
— Lamont Adams

不让主键具有可更新性的原因是在关系模式下,主键实现了不同表之间的关联。比如,
Customer 表有一个主键CustomerID,而客户的定单则存放在另一个表里。Order 表的主键可能是OrderNo 或者OrderNo、CustomerID 和日期的组合。不管你选择哪种键设置,你都需要在
Order 表中存放CustomerID 来保证你可以给下定单的用户找到其定单记录。
假如你在Customer 表里修改了CustomerID,那么你必须找出Order 表中的所有相关记录对其进行修改。否则,有些定单就会不属于任何客户——数据库的完整性就算完蛋了。
如果索引完整性规则施加到表一级,那么在不编写大量代码和附加删除记录的情况下几乎不可能改变某一条记录的键和数据库内所有关联的记录。而这一过程往往错误丛生所以应该尽量避免。
— ljboast

9. 可选键有时可做主键
记住,查询数据的不是机器而是人。
假如你有可选键,你可能进一步把它用做主键。那样的话,你就拥有了建立强大索引的能力。这
样可以阻止使用数据库的人不得不连接数据库从而恰当的过滤数据。在严格控制域表的数据库
上,这种负载是比较醒目的。如果可选键真正有用,那就是达到了主键的水准。
我的看法是,假如你有可选键,比如国家表内的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

10. 别忘了外键
大多数数据库索引自动创建的主键字段。但别忘了索引外键字段,它们在你想查询主表中的记录
及其关联记录时每次都会用到。还有,不要索引memo/notes 字段而且不要索引大型文本字段
(许多字符),这样做会让你的索引占据大量的数据库空间。。

— gbrayton
2
0
分享到:
评论

相关推荐

    数据库设计与优化.pdf

    在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效率的代码,为整个系统的 性能打下良好的基础。 以下是性能要求设计阶段需要注意的: 1.3.1 数据库逻辑设计的规范化 数据库逻辑...

    数据库设计指南-60个设计技巧

    数据库设计指南-60个设计技巧 如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据 库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,...

    《10天掌握MongoDB》2012完整版.pdf[带书签]

    地理空间索引-$WITHIN(POLYGON) 地理空间索引-球形查找 查询计划 强制使用索引 实战技巧 第五天:聚合操作 聚合操作-COUNT 聚合操作-DISTINCT 聚合操作-GROUP 聚合操作-GROUP完成器 聚合操作-GROUP键函数 聚合操作-...

    ASP和SQL网站数据库程序设计(DOC)

    ASP和SQL一直深受网站数据库设计人员的喜爱。 本书着重介绍ASP程序设计语言的各种功能及其实际应用, 同时也介绍SQL Server的程序设计技巧。本书将引导读者用ASP语法, 配合数据库系统的开发技巧,构建一个完整的...

    数据库设计法则(PDF文档)

    相信大家对数据库肯定并不陌生,但是咋样才能设计出出色的的数据库呢?本文可能对你有些启发,不信你看看... 本书分为五部分 第1 部分— 设计数据库之前 这一部分罗列了12 个基本技巧,包括命名规范和明确业务需求...

    政务平台数据库设计.doc

    (2)一致性 数据库设计要符合数据一致性原则,国家、省、地(市)重复存储的业务数据和基础 数据要保持一致性。 (3)完整性 利用关系型数据库提供的数据完整性约束功能来保证数据的完整性,特别是要合理利 用以下...

    数据库设计经验谈.pdf

    第 1部分-设计数据库之前 这一部分罗列了12 个基本技巧,包括命名规范和明确业务需求等. 第 2部分-设计数据库表 总共 24 个指南性技巧,涵盖表内字段设计以及应该避免的常见问题等. 第 3部分-选择键 怎么选择键呢?这里...

    数据库课程设计-超市管理系统.doc

    超市管理数据库设计 学 号: 姓 名: 指导教师: 超市管理系统的数据库设计 摘要 数据库的开发与设计是管理信息系统的重要组成部分,数据库设计的好坏直接影响到系 统的开发进度和功能的实现。本课程主要应用已经学...

    数据库设计指南

    所以本文主要是找了些对数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。文中从收到的130 个反馈中精选了其中的60个最佳技巧,并把这些技巧编写成了本文,为了方便索引其内容划分为5 个部分: ...

    ASP和SQL网站数据库程序设计

    3-4 数据库设计 55 3-4-1 Entities & Relationship 55 3-4-2 数据正规化 55 3-5 SQL语句 58 3-5-1 DDL数据定义语言 58 3-5-2 DML数据处理语言 59 第4章 系统的安装与激活…………….……..61 4-1 安装前的准备 ...

    数据库设计指南(SQL优化)

    第 1 部分— 设计数据库之前 这一部分罗列了12 个基本技巧,包括命名规范和明确业务需求等。 第 2 部分— 设计数据库表 总共 24 个指南性技巧,涵盖表内字段设计以及应该避免的常见问题等。 第 3 部分— 选择键 怎么...

    Access 2000数据库系统设计(PDF)---025

    964.9 设置字段的默认值 964.10 使用关系、关键字字段和索引 974.10.1 建立表之间的关系 984.10.2 实施参照完整性 1004.10.3 选择一个主键 1014.10.4 往表中添加索引 1024.11 改变字段和关系 1044.11.1 重新安排表中...

    基于GPU的内存数据库索引技术研究

    索引能够有效降低数据的搜索空间、提高内存数据库的查询效率,然而当前它却受到性能和效率的挑战。 基于图形处理器的通用计算(GPGPU)在多个领域具有重要的研究价值和应用前景,也是当前研究的热点。目前图形...

    ASP与SQL网页数据库程序设计

    3 关系型数据库 48 3-3-1 数据的表示方法 48 3-3-2 表 49 3-3-3 键 50 3-3-4 表索引 50 3-3-5 视图 51 3-3-6 存储过程 52 3-3-7 触发器 53 3-3-8 数据目录 54 3-4 数据库设计 55...

    数据库设计经验【PDF】

    所以我归纳历年来所走的弯路及体会,并在网上找了些对数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。精选了其中的 60 个最佳技巧,并把这些技巧编写成了本文,为了方便索引其内容划分为 5 个...

    数据库设计工具.docx

    BDB 引言 随着数据库规模日趋庞大,数据库设计者所面临的问题也愈来愈复杂,她们必需处置各个用户对数据库结构和内容的不同观点,衡量不同应用关于数据库组织和存取的不同需求,和大量的结构信息和数据之间的复杂...

    数据库设计命名规范.docx

    注:在MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字节 建议在大 数表中含有如下字段 数据库设计命名规范全文共6页,当前为第5页。...

    表结构设计器_小巧的数据库建模工具

    表结构设计:创建表、字段、主键、外键、索引和注释; b. 表描述:可直接编辑文字描述快速生成表结构,爱用键盘的人会喜欢这个功能; c. 模型图:自动生成模型图;可设计和显示物理/逻辑视图,支持自动布局、平移...

    浅谈数据库设计方法.doc

    浅谈数据库设计方法 本文主要对数据库设计理论内容进行全面分析,这是建立在软件开发经验基础上实施 的操作,可以根据不同角度来阐述数据库设计的方法,以及设计技巧,让更多的数据库 设计人员了解数据库设计相关...

Global site tag (gtag.js) - Google Analytics