该如何建立这样一个数据库?

“电脑”(名称)由“显示器”“主机”“键盘”“鼠标”(部件)组成“显示器”有“LCD”“CRT”。。。(分类)“主机”有“大机箱”,“小机箱”。。。。。。“LCD”里面含... “电脑”(名称)由“显示器”“主机”“键盘”“鼠标”(部件)组成
“显示器”有“LCD”“CRT”。。。(分类)
“主机”有“大机箱”,“小机箱”。。。
。。。
“LCD”里面含有a,b,c,e....(物质)
“CRT”里面含有a,c,f,g....
.....
我要实现的功能是:
1、输入名称,可以查到相应的组成部件和部件分类,以及里面含有的物质;
2、输入物质名称,可以反查到哪些部件里面含有这些物质

请问各位高手,该如何规划数据库的结构?要建立几张表?我是新手,刚接触这东西,对各位高手来说这可能是小儿科的问题,但对我来说不亚于哥德巴赫猜想,所以请各位高手不吝赐教!!!!!
非常感谢一楼!!您说的组成-物质关联表我理解,但关联表中的数据分别采用什么类型比较好?如果组成与物质都有自己的ID,是不是可以用ID进行关联,关联时采用什么类型数据?我采用的是php+mysql
展开
 我来答
窗边的小豆豆里48
2008-10-11 · 超过15用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:0
展开全部
我说说我怎么看啊,我觉得一楼的做法一方面在数据完整性方面有点不大严谨,另一方面在实现上有一定困难,因为在组件和物质的问题上会出现一对多的对应关系,貌似这样的方案在某种组件包括大于等于两种物质的情况下首先组织-物质关联表的PK是不能允许的,如果把PK去掉就会出现单表数据过重的现象,影响数据库效率。楼主看看这个方案行不行?

电脑表
tab_computers
computer_name text,
monitor_id number (FK reference to tab_compontents(compontent_id)),
computer_case number (FK reference to tab_compontents(compontent_id)),
keyboard number (FK reference to tab_compontents(compontent_id)),
mouse number (FK reference to tab_compontents(compontent_id)),
...;
组件表
tab_compontents
compontent_id number (PK),
compontent_name text;

组件关联
tab_relation
compontent_id number (FK reference to tab_compontents(compontent_id)) (index),
substance_id number (FK reference to tab_substances(substance_id));

物质表
tab_substances
substance_id number (PK),
substance_name text,
substance_description text;

这个方案把所有一对多的关系的过重数据全部集中到tab_relation表中,而这个表只有两个外键id列,一方面确保了数据完整性,一方面在compontent_id列有索引再加上本身只有两个数字列,可以增加数据库检索速度。减少了text数据类型在其他表中的冗余条目。
如果看不明白的话我可以再给你个例子^-^
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
百度网友2267040
2008-10-10
知道答主
回答量:26
采纳率:0%
帮助的人:16.7万
展开全部
三张表:
电脑组成表:电脑名称(主键)、显示器分类名、主机分类名、键盘分类名、鼠标分类名、。。。
物质表:物质名称、物质描述
组成-物质关联表:组成部件分类名(主键)、物质名称
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式