我将销售单存储在两个表中(简化):BillHeader(BillId,Date,Salesman)和BillDetail(BillId,LineId,ItemId,Quantity ...)我想将BillId作为表BillHeader的主键; (BillId,LineId)作为表BillDetail的主键,我可以使它成功(我也可以在SQL数据库中看到真正的主键)。问题是我不能将表BillDetail的BillId作为外键,以确保我不能输入错误的BillId数据(在BillHeader表中没有相关的BillId):我检查了数据库,但是在那里看不到相关的外键。
以下是我的所作所为: 1)表BillHeader: - 字段BillId:[强制] =是。 - index idx_BillId使用字段BillId:[AllowDuplicates] =否,[AlternateKey] =是。 - 表BillHeader:[PrimaryIndex] = idx_BillId,[ClusterIndex] = idx_BillId。
SQL数据库显示了[PARTITION],[DATAAREAID],[BILLID]列,用于制定表格的主要内容。
2)表BillDetail: - 添加新关系fk_BillId:[Table] = BillHeader(父表),[Validate] = Yes,[RelatedTableCardinality] = ExactlyOne(表BillDetail中的每条记录在BillHeader中只有一条相关记录),[Cardinality] = ZeroMore(每个在BillHeader中使用相同billId记录BillDetail中有0个或更多相关记录,[RelationshipType] =关联(外键) - 添加新关系后,会在表BillDetail中添加一个新字段,将其重命名为BillId,并设置[Mandatory] = Yes。
完成这些步骤之后,我尝试使用X ++代码(简单表格的插入()方法)将几条新记录插入表BillDetail中,即使我没有任何东西,我也可以成功完成在父表中。我错过了什么?
谢谢。
答案 0 :(得分:0)
如果要使用x ++进行验证插入,则需要覆盖validate write方法以进行验证。 https://msdn.microsoft.com/en-us/library/hh803130.aspx
使表关系验证属性为“是”表示除非相关记录存在于引用的父表中,否则表单中每个表单插入子表都将被拒绝。