我想做一个药品管理系统的数据库
它的药品分类是这样的

请问这种树形结构在应该如何创建数据库
我想了二个方案,请问大神们觉得哪种最好,或者有没有更好的方案
第一种方案:
分成四张表
第一张表是第一层分类,里面有西药、中成药、中草药
第二张表是第二层分类,里面有针剂、片剂、丸剂、散剂等等
第三张表是第三层分类,里面有大输液类、维生素类、抗菌类等等
第四张表是详细的药品信息表,里面有药品的名称、单位、规格、价格等等
第二种方案:
只有一张表
里面有药品的详细信息
也有分类编号
------解决思路----------------------
一张表比较好
Create Table medicine(
ID int NOT NULL,
MedicineName VARCHAR(50) NOT NULL,
MedicineCode VARCHAR(50) NOT NULL,
Ancestor int not null,
Remark varchar(200)
)
其中Ancstor = 0表示药物大类,下面语句查询大类对应的子类(层次递归)
select x.MedicineName BigClassName.y.*
from medicine x,medicine y
where x.id=y.Ancestor and x.ancestor=0 and y.Ancestor>0
------解决思路----------------------
Ancestor是父节点ID值,Remark是备注字段
表数据
ID MedicineName MedicineCode Ancestor
1 西药 00001 0
2 中药 00002 0
----------------------西药的子类别-------------
3 针剂 10000 1
4 片剂 10001 1
5 外用药 10002 1
....
------------------针剂细分-------------------------
6 大输液类 20000 3
6 止血类 20001 3
.....
懂了没?
------解决思路----------------------
第一种方案容易因为需求变更而大概,一般我会考虑使用第二种。
------解决思路----------------------
方案二改一下
药品明细一张表,外键为分类。
分类一张表,有父子关系。
------解决思路----------------------
同意楼上
然后,分类表上,最好维护出一个路径字段,很多处理效率都会好很多