在一个类型化的DataSet中有一个 学生表 一个分组表 每个学生都属于一个分组或没有分组。如何通过XSD定义他们之间的关系。使学生可以导航到他的分组?
(上面的题目是吸引眼球的,这个问题应该很常见啊 就是如何在外键列定义可以为空的字段。大家帮帮忙啊 不要当真哈~_~)

解决方案 »

  1.   

    为什么一定要用DataSet?自己定义对象模型不好吗?
      

  2.   

    通常情况下一旦学生和分组建立关系。则学生的分组就不允许为空了。我现在需要学生可以没有分组。另外学生的分组外键是int类型的
      

  3.   

    > 通常情况下一旦学生和分组建立关系。则学生的分组就不允许为空了。
    sure在分组表中创建一个默认分组,比如 ID = 0,Name = '未分组'
    给学生的 GroupID 一个默认值(上面的 0),没有组的就是用该默认值也就是说,通过关系本身无法完全解决该问题,因为:没有组的学生如何处理?如何看待他们?——这其实是业务领域的问题,数据库无法理解,而也没有提供这样的方法来解决这一问题。另外,实际应用中,往往一个学生/用户 可能会在多个组中——除非你这里的组是 班级/部门 的概念,这里提醒一下。
      

  4.   

    如果是我,我会建立School/ClassGroupStudentStudent一定属于School或者Class,从创建起就是如此,可以根据安排和设置属于0到多个Group。用对象还是更清晰。何况DataSet太沉重。
      

  5.   

    没看懂,太深奥了吧。换了我的话我会写个学生类,包含2个属性,已分组+未分组。不需要建立什么xsd.
      

  6.   

    大家就别讨论什么对象什么的了。custom class 的方式我用了两年。typed dataset 刚开始用,遇到这么一个低级问题。希望大家都说说怎么做。
      

  7.   

    谢谢大家的发言。
    piggybank(吞硬币的小猪) 
    > 通常情况下一旦学生和分组建立关系。则学生的分组就不允许为空了。
    sure在分组表中创建一个默认分组,比如 ID = 0,Name = '未分组'
    给学生的 GroupID 一个默认值(上面的 0),没有组的就是用该默认值也就是说,通过关系本身无法完全解决该问题,因为:没有组的学生如何处理?如何看待他们?——这其实是业务领域的问题,数据库无法理解,而也没有提供这样的方法来解决这一问题。另外,实际应用中,往往一个学生/用户 可能会在多个组中——除非你这里的组是 班级/部门 的概念,这里提醒一下。-----------------------------------------
    其实数据库是支持这种定义,因为引用完整性就是允许为空的啊。
      

  8.   

    把学生表中的外键设为
    msprop:nullValue="_null"
    不行吗?
      

  9.   

    在类型化数据集中,一旦学生和分组建立关系后,学生的add方法里分组就必须使使用分组"行类型"。如果你给一个null的话在数据集自己生成的代码中学生的add方法是要访问分组的[ID序号]那个列的。这是就会报"未将对象引用到实例"的错误。