散点分,大家来讨论一个优化问题,欢迎参与

voyager 2003-11-24 01:41:40
对于数据库关系(主外键)的设计,不外乎几种

第一种是层层关联,相关的数据只存储一份,这样在增加修改时数据量少,但在查询时必然得通过视图或程序取出相同数据,此种方式,强调数据间的连系紧密性,优点很明白,就是能减少存储量,减少数据的不一致性,不会出现同一个编号的东西,在某一环节叫A,另一环节叫B的情况,但可能出现要取一个完整的数据信息时,需要多层反推,或者是视图内嵌视图的情况,

第二种是遍地开发,把数据复制到多个表中,程序可能变更复杂些,但每个表里的每条记录都是完整或基本完整的,这样在列示或查看时,可以显著地减少工作量,但由此带来的为了保证数据同步而增加了系统开销,如修改基本数据时,相关联的表,可能名称也要同时UPDATE

第三中,两种结合形,优势互补,也不失为中庸之道
个人认为:这两种方法都无可厚非,关系看应用的不同,如果WEB上,现在一些论坛,select操作的量可能要占到80%或更多,这时,似乎应该选用第2种更实际些,
但一些商用MIS系统,却经常让数据库设计显得很为难,不知如何取舍,

在这里,小弟抛臭砖一块,期待能引出大家之美玉,谈谈想法,比如各在系统设计时如何考虑,实施后碰到的问题,以及根据哪些应用进行取舍?
...全文
44 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotaxe 2003-11-24
  • 打赏
  • 举报
回复
我觉得不一定要完全规范化,同意pbsql(风云)。
8LY8Apollo 2003-11-24
  • 打赏
  • 举报
回复
up
lczddd 2003-11-24
  • 打赏
  • 举报
回复
呵呵,不能定的太死,具体情况具体分析了。。
swich 2003-11-24
  • 打赏
  • 举报
回复
第一种
Benimarunikado 2003-11-24
  • 打赏
  • 举报
回复
既然是讨论,检讨就不必了~
我的看法是:
RDBMS的一个显著特点就是尽可能的减少数据冗余,为什么呢?数据冗余问题是数据库的一大克星:浪费存储空间,极容易造成数据不一致,给数据的修改和维护增加了极大的开销;另外还可能带来“脏数据”(无效数据或不正确的数据);
因此,我极力赞成楼主的第一个方案!虽然可能会在建立数据库时麻烦一些(关联,嵌套过多),但是在数据库建立好了之后会带来很多便利!
/* 个人观点! */
qianduo 2003-11-24
  • 打赏
  • 举报
回复
第一种办法
voyager 2003-11-24
  • 打赏
  • 举报
回复
应该是我自己说得不够明白,确切的说,本贴本意是作一个调查,并且要求对你的投票作出详细的解释:)是我自己错了,刚接到一个贴友的电话,这里检讨一下
voyager 2003-11-24
  • 打赏
  • 举报
回复
希望大家从实例的角度评说优缺点,以及实施中碰到的问题,而不是从书上抄一段什么是外键,什么是范式的,这些,我想作过数据库设计的都会懂一些
jingxijun 2003-11-24
  • 打赏
  • 举报
回复
学习
pbsql 2003-11-24
  • 打赏
  • 举报
回复
其实主要还是取决于你的系统是插入更新数据多还是查询多,若数据经常插入更新则选一,否则可以考虑二、三
pbsql 2003-11-24
  • 打赏
  • 举报
回复
第一种只在查询时会降低系统性能,插入更新时都会很快

第二、三种可以通过触发器保证数据一致性,但每次插入更新时都会触发从而降低系统性能

所以建议第一种
yoobj 2003-11-24
  • 打赏
  • 举报
回复
当然是第一种办法
zjcxc 元老 2003-11-24
  • 打赏
  • 举报
回复
毕竟,复杂的关系用存储过程和视图来处理.

要不,也就叫关系型数据库了.
zjcxc 元老 2003-11-24
  • 打赏
  • 举报
回复
我个人怎么都建议选择第一种
pengdali 2003-11-24
  • 打赏
  • 举报
回复
帮助上都有,你如果是程序员,应该可以自己找到的。
pengdali 2003-11-24
  • 打赏
  • 举报
回复
转贴就不贴了。怕太多了,刷屏。

在系统设计时我还是认为按你说的第一点。你完全可以用视图、索引视图、参数视图。
txlicenhe 2003-11-24
  • 打赏
  • 举报
回复
当然是第一种办法
txlicenhe 2003-11-24
  • 打赏
  • 举报
回复
1:
数据库设计专题:
http://www.csdn.net/subject/251/

2:
看看你的设计是不是满足第三范式3NF .

范式
构造数据库必须遵循一定的规则在关系数据库中这种规则就是范式范式是符合
某一种级别的关系模式的集合关系数据库中的关系必须满足一定的要求即满足不同的
范式目前关系数据库有六种范式第一范式1NF 第二范式2NF 第三范式3NF
第四范式4NF 第五范式5NF 和第六范式6NF 满足最低要求的范式是第一
范式1NF 在第一范式的基础上进一步满足更多要求的称为第二范式2NF 其余
范式以次类推一般说来数据库只需满足第三范式3NF 就行了下面我们举例介绍
第一范式1NF 第二范式2NF 和第三范式3NF
第一范式1NF
在任何一个关系数据库中第一范式1NF 是对关系模式的基本要求不满足第一
范式1NF 的数据库就不是关系数据库
所谓第一范式1NF 是指数据库表的每一列都是不可分割的基本数据项同一列中
不能有多个值即实体中的某个属性不能有多个值或者不能有重复的属性如果出现重复
的属性就可能需要定义一个新的实体新的实体由重复的属性构成新实体与原实体之
间为一对多关系在第一范式1NF 中表的每一行只包含一个实例的信息例如对
于图3-2 中的员工信息表不能将员工信息都放在一列中显示也不能将其中的两列或多
列在一列中显示员工信息表的每一行只表示一个员工的信息一个员工的信息在表中只
出现一次简而言之第一范式就是无重复的列
第二范式2NF
第二范式2NF 是在第一范式1NF 的基础上建立起来的即满足第二范式2NF
必须先满足第一范式1NF 第二范式2NF 要求数据库表中的每个实例或行必须可
以被惟一地区分为实现区分通常需要为表加上一个列以存储各个实例的惟一标识如
图3-2 员工信息表中加上了员工编号emp_id 列因为每个员工的员工编号是惟一的
因此每个员工可以被惟一区分这个惟一属性列被称为主关键字或主键主码
第二范式2NF 要求实体的属性完全依赖于主关键字所谓完全依赖是指不能存在
仅依赖主关键字一部分的属性如果存在那么这个属性和主关键字的这一部分应该分离
出来形成一个新的实体新实体与原实体之间是一对多的关系为实现区分通常需要为表
加上一个列以存储各个实例的惟一标识简而言之第二范式就是非主属性非部分依赖
于主关键字
第三范式3NF
满足第三范式3NF 必须先满足第二范式2NF 简而言之第三范式3NF
要求一个数据库表中不包含已在其它表中已包含的非主关键字信息例如存在一个部门
信息表其中每个部门有部门编号dept_id 部门名称部门简介等信息那么在图3-2
的员工信息表中列出部门编号后就不能再将部门名称部门简介等与部门有关的信息再加
入员工信息表中如果不存在部门信息表则根据第三范式3NF 也应该构建它否则
就会有大量的数据冗余简而言之第三范式就是属性不依赖于其它非主属性

txlicenhe 2003-11-24
  • 打赏
  • 举报
回复
联机帮助:

FOREIGN KEY 约束
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。

例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。



FOREIGN KEY 约束并不仅仅只可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束不允许空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过 FOREIGN KEY 约束的校验。



说明 FOREIGN KEY 约束可引用同一数据库中的表或同一表(自引用表)内的列,例如,一个包含下面三列的雇员表:employee_number、employee_name 和 manager_ employee_number。由于经理本身也是雇员,所以从 manager_employee_number 列到 employee_number 列存在外键关系。


尽管 FOREIGN KEY 约束的主要目的是控制存储在外键表中的数据,但它还可以控制对主键表中数据的修改。例如,如果在 publishers 表中删除一个出版商,而这个出版商的 ID 在 titles 表中记录书的信息时使用了,则这两个表之间关联的完整性将被破坏,titles 表中该出版商的书籍因为与 publishers 表中的数据没有链接而变得孤立了。FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改是不能实现的,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束值相关,则该操作不可实现。若要成功更改或删除 FOREIGN KEY 约束的行,可以先在外键表中删除外键数据或更改外键数据,然后将外键链接到不同的主键数据上去。

FOREIGN KEY 约束是索引的候选约束,其原因有以下两点:

对 PRIMARY KEY 约束的更改可由相关表中的 FOREIGN KEY 约束校验。


当在查询中组合来自相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的 FOREIGN KEY 约束中的列与另一个表中的主键列或唯一键列匹配。索引使 Microsoft® SQL Server™ 2000 得以快速查找外键表中的相关数据。但是,创建索引不是必需的。即使没有在表间定义 PRIMARY KEY 或 FOREIGN KEY 约束,也可以对来自两个相关表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。有关在联接中使用 FOREIGN KEY 约束的更多信息,请参见联接基础知识。
QT6视频课程QT&QML性能优化网络编程界面美化 【QT6 GUI模块绘图技术主题原理与源码分析】 QT 画刷的理解 QT 绘图设备的理解 QT 绘图引擎的原理与源码分析 QT 图像和像素图的原理与源码分析 QT 绘图开始和结束的原理与源码分析 【QT6 Widgets应用程序性能优化实战视频课程】 QT字符串优化实战 QT绘图优化具体实战 QT界面优化具体实战 QT高性能统计图优化实战 QT高性能网络服务器优化实战 【QT6 QML应用程序性能优化实战视频课程】 QT QML应用程序中QML源码保护实战 QT QML应用程序中QML组件异步加载实战 QT QML应用程序中QML异步任务实战 QT QML应用程序中QML性能可视化实战 QT QML应用程序中QML界面控件优化实战 QT QML应用程序中QML图片优化实战 QT QML应用程序中JavaScript脚本优化实战 【QT6视频课程 如何使用Qt WebEngine开发Web浏览器软件】 掌握Qt WebEngine框架应用编程技术 掌握如何使用Qt WebEngine开发一款浏览器软件 获得基于Qt WebEngine的Web浏览器软件的源码 【QT6视频课程 HTTP Web Server服务器编程实践】 QT6 HTTP服务器编程必备的HTTP协议基本知识。 QT6 网络编程基础知识。 QT6 HttpServer组件基础知识。 QT6 如何搭建基础的HTTP Web服务器。 QT6 如何开发RESTful风格的HTTP Web应用程序。 QT6 如何实现HTTP Web应用程序的用户认证和安全加密服务。 QT6 如何实现HTTP Web服务器功能扩展,比如文件上传功能。 【QT6视频课程 网络编程概念与实践】 TCP编程概念与实践 UDP编程概念与实践 网络文件传输编程概念与实践, HTTP客户端编程概念与实践 WebSocket编程概念与实践 【QT Widgets统计图编程概念与实践】 QT6统计图模块 QT6折线图具体编程概念与实践 QT6曲线图具体编程概念与实践 QT6柱状图具体编程概念与实践 QT6饼状图具体编程概念与实践 QT6点图具体编程概念与实践 QT6面积图具体编程概念与实践 QT6极点图具体编程概念与实践 QT6箱线图具体编程概念与实践 QT6烛台图具体编程概念与实践 【QT6 QML统计图编程概念与实践 QT视频课程】 QML统计图模块 QML折线图具体编程概念与实践 QML曲线图具体编程概念与实践 QML柱状图具体编程概念与实践 QML饼状图具体编程概念与实践 QML点图具体编程概念与实践 QML面积图具体编程概念与实践 QML极点图具体编程概念与实践 QML箱线图具体编程概念与实践 QML烛台图具体编程概念与实践 【QT6样式表QSS界面美化实战视频课程】 QT样式表课程 QT样式表基础语法 QT样式表常用概念 QT标签界面美化实战 QT编辑框界面美化实战 QT按钮界面美化实战 QT单选框界面美化实战 QT复选框界面美化实战 QT进度条界面美化实战 QT组合框界面美化实战 QT树状控件界面美化实战 QT表格界面美化实战 QT标签页界面美化实战 QT分组框界面美化实战 QT分割条界面美化实战 QT菜单界面美化实战 QT工具条界面美化实战 QT状态栏界面美化实战 QT对话框界面美化实战 QT主窗口界面美化实战 【QT6 QML控件美化 QML界面美化实战 QT视频课程】 QML控件背景界面美化 QML编辑框控件界面美化 QML调节器控件界面美化 QML按钮控件界面美化 QML单选框控件界面美化 QML复选框控件界面美化 QML进度条控件界面美化 QML滑块控件界面美化 QML滚动条控件界面美化 QML组合框控件界面美化 QML标签栏控件界面美化 QML拨号盘控件界面美化 QML页面指示器控件界面美化 QML延迟按钮控件界面美化 QML卷轴控件界面美化 QML忙指示器控件界面美化 QML分割视图控件界面美化 QML列表视图控件界面美化 QML网格控件界面美化 QML表格控件界面美化

34,611

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧