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

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

请问各位高手,该如何规划数据库的结构?要建立几张表?我是新手,刚接触这东西,对各位高手来说这可能是小儿科的问题,但对我来说不亚于哥德巴赫猜想,所以请各位高手不吝赐教!!!!!
非常感谢一楼!!您说的组成-物质关联表我理解,但关联表中的数据分别采用什么类型比较好?如果组成与物质都有自己的ID,是不是可以用ID进行关联,关联时采用什么类型数据?我采用的是php+mysql

我说说我怎么看啊,我觉得一楼的做法一方面在数据完整性方面有点不大严谨,另一方面在实现上有一定困难,因为在组件和物质的问题上会出现一对多的对应关系,貌似这样的方案在某种组件包括大于等于两种物质的情况下首先组织-物质关联表的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表中,而这个