学生为外表
member 里有个外键字段是学生ID
查询的时候根据学生ID查询

解决方案 »

  1.   

    不知楼上说的外表是何物?学生为主表。家庭成员为子表, 用家庭表中学生ID作外键对应 学生表ID
    查询关系的时候根据学生ID查询
      

  2.   

    如果你非要在学生表里放个字段负责所有的家庭信息的话
    关系不就变成多对多了,他们间的关系是一对多
    那必须得变3张表了
    学生            学生家庭信息表       家庭信息表
    学生ID  关联    学生家庭信息ID       家庭信息ID(分别一跳单独信息)其实只要2张表就好了
    学生ID      关联   家庭信息(学生ID做为外键)
      

  3.   

    家庭关系表:学生ID  关系   姓名    工作单位1001    儿子    龟     小河流水哗啦啦
    1001    母亲    鳖     大河流水咕噜噜
    1002    母亲    蟹     大江流水轰隆隆
    学生表:学生ID   姓名  性别  班级
    1001     张三   女   sexy01班
    1002     李四   女   sexy01班
    1003     赵五  人妖  Fk01
      

  4.   

    student表中有学生的主键字段吧。
    在member表中建student表的外键 还可以建立关系来强制业务规则 插入的时候可以把插入操作放在一个事务中先加入学生的信息 得到@@identity(就是该学生在student表中的主键ID)后 再根据这个ID在表member中插入他的家庭成员。  最后判断@@error 如果有错误的话全部回滚 否则就提交事务就可以了。
      

  5.   

    flaigd(骑白马的不一定是王子,可能是唐僧..) 这位大哥说的和我想的完全一样,就余最后一个问题了:我已经启用了事务,而且用@@identity得到了主表的ID,问题是当我提交的时候,判断@@error没有错误,但是子表中只传来了一条数据,点保存的时候就已经和主表的一条数据写入数据库中了,怎么才能保证子表的多条信息在录入完后和主表一想保存,怎样实现一对多数据的插入?
      

  6.   

    这个有点麻烦 因为mssql没有提供数组类型的参数  1.可以在ADO.Net中使用TranscationScope类。 这个简单点。2.或者把家庭成员的数据用自定义的结构保存起来
    比如  关系|姓名|工作单位,关系|姓名|工作单位 然后在存储过程中实现split的功能,用逗号分隔出来 再一条一条插入 很麻烦而且你还得确保你的字符串中没有和|,冲突的字符
      

  7.   

    当我在student表中插入"张三"的时候,其它的家庭成员怎么插入,问题就是家庭成员每次不至一个人,可能会好几个人,如何在插入一条数据的时候在另一个表中插入多条数据,并且两个表要有关联==========1。
    假如你是在写入学生数据的时候,同时写入其家庭成员数据,那么这两个操作要作为一个事务完成2。
    要点是,先写入学生数据,然后返回学生主键,紧接着写入家庭成员数据3。
    具体代码你可以参考我的文章如何获取自增长列(标识列)的ID,并写入另一张表(多对多关系插入数据示例) 
    http://www.cnblogs.com/Jinglecat/archive/2007/07/05/806421.html文中我举的是,多对多关系的DEMO,实际上多对多,是分解为两个一对多(即,你的父子关系)来实现的,所以,你一看即明白
    Good Luck!
      

  8.   

    而且用@@identity得到了主表的ID,问题是当我提交的时候,判断@@error没有错误=======假如你准备使用存储过程来完成的话,最好是分开两个,一个写 Student, 一个写 Relation
    应用程序中,写入 Student ,循环调用写 Relation,一个存储过程不好处理, 因为无法同时传递多条数据,用分隔符拼接,反而更麻烦,且某些类型的数据,如 image 是无法拼接的