日期:2014-05-19  浏览次数:20427 次

问个数据库设计问题。
合同ID       合同名字       合同内容                               合同子类
----------------------------------
001             开发合同         开发个ERP                           网站制作     软件开发     后期维护
002             维护合同         做个小网站                         网站制作     后期维护
003             实施合同         开发个管理系统                 软件开发     现场实施



这里ID是主键,合同名字是VARCHAR,合同内容是VARCHAR,这都好理解,关键是有个合同子类,反映在具体页面上是客户可以选择的,一共有三个选项,举个例子,就是网站制作,软件开发,现场实施,后期维护这四个,页面上都是以CHECKBOX的形式显示出来的,对于一个合同,可以只有一个子类,也可以有多个子类,请问这个数据库怎么设计啊?

把合同子类单独作为一张表吗?
合同子类ID       合同子类名字
---------------------------
1                           网站制作
2                           软件开发
3                           现场实施
4                           后期维护

这样吗?再怎么和合同表连起来呢?
当查询某一条合同详细信息的时候要可以看到这个合同包含几个合同子类
怎么设计?
SQL语句怎么写?

------解决方案--------------------
//合同表
======
合同ID 合同名字 合同内容
----------------------------------
001 开发合同 开发个ERP
002 维护合同 做个小网站
003 实施合同 开发个管理系统

=====
//合同与合同子类关系表
合同ID 合同子类ID
----------------
001 1
001 2
001 4
002 1
.... ...

================
//合同子类表
合同子类ID 合同子类名字
---------------------------
1 网站制作
2 软件开发
3 现场实施
4 后期维护


===========
做视图 连接3个表
------解决方案--------------------
合同子类
合同子类ID 合同子类名字
---------------------------
1 网站制作
2 软件开发
3 现场实施
4 后期维护

合同表
合同ID 合同名字 合同内容 合同子类
----------------------------------
001 开发合同 开发个ERP 1,2,4
002 维护合同 做个小网站 1,4
003 实施合同 开发个管理系统 2,3

需要取合同之类 数据的时候讲1,2,4数据进行分解 然后从合同子类表取数据就行了
------解决方案--------------------
如要满足第三泛式,以下设计应该可以。(参考)
合同ID 合同名字 合同内容 合同子类编号
----------------------------------
001 开发合同 开发个ERP 1
002 维护合同 做个小网站 2
003 实施合同 开发个管理系统 3

ID 合同子类编号 合同子类名字
-------------------------------------------------------
1 1 网站制作
2 2 网站制作
3 2 软件开发
4 3 网站制作
5 3 软件开发
6 3 现场实施
7 4 网站制作
……
N 5 软件开发
N+1 6 现场实施