主子表,子表数据依赖于主表。例如一个销售负责联系多个客户,则销售人员表是主表,客户表是子表,客户表中有个字段是联系人,联系人的数据类型是对销售人员表的引用。如一个学生有语文、数学、英语等多科成绩,则学生表是主表,成绩表是子表,成绩表中有个字段学号是引用学生表的记录。
主表和子表的关系为一对多。主表和子表的关系由子表中字段类型“引用”决定,一个数据表引用另一个数据表信息才能界定为主子表关系。
当录入成绩的时候,我们可以添加一个学生,同时输入该学生几个科目的成绩。这样,我们就同时更新了学生表和成绩表,这就涉及到两个表在一个页面同时保存的问题。下面我们实现这个功能。
-
建立一个学生表,字段是id、名称;建立一个成绩表,字段是id、学生、科目、分数,其中学生字段的类型是引用学生表。
-
页面数据增加一个it变量,泛型是学生表。增加一个ds变量,泛型是成绩表。
it变量的条件参数设置为table.学生.id ==@it_id,当没有@it_id这个参数时,平台会为此记录分配新的id。
ds变量的条件参数设置为table.成绩.id == 0,表示每次打开这个页面的时候,显示的成绩列表都是空值,等待输入。新输入的成绩记录id为空,平台也会为此记录分配新的id。
- 页面上用一个输入框输入学生的姓名,用一个列表添加成绩(可以多个科目的成绩)。列表右侧设置一个添加行按钮、一个删除行按钮,用于添加一个科目成绩的时候在下方增加一行,两个按钮控件属性默认即可。
-
把 =it.id 单元格的保存至属性设置为 it.id | ds.学生 ,其他为默认,此时在预览页面上输入信息,点击保存就可以把信息同时存入两个表。
页面刚打开时,学生记录的id和成绩记录的id都为null,存到数据库时才会确定。平台更新时会按照从上到下、从左到右的顺序更新各个数据,能够先确定学生的id,然后再更新成绩表中的学生id,保证了数据的一致性。