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



这里ID是主键,合同名字是VARCHAR,合同内容是VARCHAR,这都好理解,关键是有个合同子类,反映在具体页面上是客户可以选择的,一共有三个选项,举个例子,就是网站制作,软件开发,现场实施,后期维护这四个,页面上都是以CHECKBOX的形式显示出来的,对于一个合同,可以只有一个子类,也可以有多个子类,请问这个数据库怎么设计啊?把合同子类单独作为一张表吗?
合同子类ID   合同子类名字
---------------------------
1             网站制作
2             软件开发
3             现场实施
4             后期维护这样吗?再怎么和合同表连起来呢?
当查询某一条合同详细信息的时候要可以看到这个合同包含几个合同子类
怎么设计?
SQL语句怎么写?

解决方案 »

  1.   

    上面的“一共有三个选项”改为“一共有四个选项”
    CSDN不能编辑自己的帖子还真麻烦
      

  2.   

    //合同表
    ======
    合同ID   合同名字   合同内容              
    ----------------------------------------------------------------------
    001      开发合同    开发个ERP            
    002      维护合同    做个小网站            
    003      实施合同    开发个管理系统  =====
    //合同与合同子类关系表
    合同ID        合同子类ID    
    ----------------
    001               1     
    001               2
    001               4 
    002               1
    ....               ...================
    //合同子类表
    合同子类ID   合同子类名字
    ---------------------------
    1             网站制作
    2             软件开发
    3             现场实施
    4             后期维护             
    ===========
    做视图 连接3个表
      

  3.   

    合同子类
    合同子类ID   合同子类名字
    ---------------------------
    1             网站制作
    2             软件开发
    3             现场实施
    4             后期维护合同表 
    合同ID   合同名字   合同内容               合同子类
    ----------------------------------------------------------------------
    001      开发合同    开发个ERP             1,2,4
    002      维护合同    做个小网站            1,4
    003      实施合同    开发个管理系统        2,3需要取合同之类 数据的时候讲1,2,4数据进行分解 然后从合同子类表取数据就行了
      

  4.   

    合同表
    合同ID 合同名字  合同内容         合同子类
    ----------------------------------------------------------------------
    001    开发合同  开发个ERP        1,2,4
    002    维护合同  做个小网站       1,4
    003    实施合同  开发个管理系统   2,3那这个合同子类是什么类型?
    INT?
    可以这样记录吗?1,2,4?
    没这样做过
    请指点。
      

  5.   

    页面上要显示这条合同的合同子类的详细信息 可以先把1,2,4 的数据取出来 
    然后对他分解 a.split(',') 然后在将他拼凑成 '1','2','4' 这样的字符串 然后用
    select * from 合同子类表 where 子类ID in('1','2','4')就行
    当然如果你的子类ID号是int型的话连分解拼凑都免了 直接
    select * from 合同子类表 where 子类ID in(1,2,4)就行
      

  6.   

    xinfan(新凡) 的做法也是一样 先取出合同ID号 在根据合同ID号 对合同子类表和合同与合同子类关系表进行联合查询 就可以了
      

  7.   

    等等,那么:
    1,2,4 
    那这个合同子类就是char类型的?
      

  8.   

    xinfan(新凡) 设计得不错哦,但本人比较喜欢用uniqueidentifier作为ID,大家同意吗?
      

  9.   

    库要设计的合理 尽量满足第三范式========================================但本人比较喜欢用uniqueidentifier作为ID,大家同意吗?========================================两位能说的详细点吗?
      

  10.   

    如要满足第三泛式,以下设计应该可以。(参考)
    合同ID   合同名字   合同内容              合同子类编号
    ----------------------------------------------------------------------
    001      开发合同    开发个ERP            1
    002      维护合同    做个小网站           2 
    003      实施合同    开发个管理系统       3ID     合同子类编号   合同子类名字
    -------------------------------------------------------
    1       1             网站制作
    2       2             网站制作
    3       2             软件开发
    4       3             网站制作
    5       3             软件开发
    6       3             现场实施
    7       4             网站制作
    ……
    N       5             软件开发
    N+1        6             现场实施
    N+2       7            后期维护
    ……
      

  11.   

    合同表
    1     开发合同子类表
    1     子类合同表 与 子类表 的关系表
    1      合同ID        子类ID其中1都为自动编号主键
      

  12.   

    Animatrix(WEB在手,天下我有,千秋万代,一统江湖) 
       也就是说合同和合同子类的关系要单独作为一张表?
    --------------------------------------------------------当然可以单独做一张表 相对来说也比较清晰,只不过要看你的数据是怎么样的,如果你的字类ID号为整数的话 那么我说的方法完全可行,毕竟一个合同不会同时为很多类别的吧 最多5个也差不多了。
      
     
      

  13.   

    当然可以单独做一张表 相对来说也比较清晰,只不过要看你的数据是怎么样的,如果你的字类ID号为整数的话 那么我说的方法完全可行,毕竟一个合同不会同时为很多类别的吧 最多5个也差不多了。正好是5个合同子类。
    OK,马上给分。