需要在 2 个集合字段上创建唯一约束

Need to create a unique constrain on 2 collection fields

场景:正在创建时间 Tracking/Punch 卡系统,将被 40 多所学校使用。由于会计处理工资单的方式,员工必须估计他们在支付期结束时将工作的小时数。此外,每所学校的每个发薪期都必须输入其员工必须估算剩余发薪期的小时数的日期。

这些是与我的问题相关的实体:

我想要实现的目标

  1. 最重要的是,我需要确保 PayPeriodEstimateHoursSchedule 学校不能输入 2 条记录 相同的支付期。

  2. 如果可能的话,我想创建一个名为 可以从单个实体调用的 LoadBySchoolAndPayPeriod 而不是集合实体。

PayPeriodEstimateHoursSchedule.LoadBySchoolAndPayPeriod(bmiSchool, currentPayPeriod)

而不是

PayPeriodEstimateHoursScheduleCollection.LoadBySchoolAndPayPeriod(bmiSchool, currentPayPeriod)

.

  <cf:entity name="School" namespace="DemoCompositeKey">
    <cf:property name="Id" key="true" />
    <cf:property name="Name" />
  </cf:entity>
  <cf:entity name="PayPeriod" namespace="DemoCompositeKey">
    <cf:property name="Id" key="true" />
    <cf:property name="StartDate" typeName="date" />
    <cf:property name="EndDate" typeName="date" />
  </cf:entity>
  <cf:entity name="PayPeriodEstimateHoursSchedule" namespace="DemoCompositeKey">
    <cf:property name="Id" key="true" />
    <cf:property name="Date" typeName="date" />
    <cf:property name="PayPeriod" typeName="{0}.PayPeriod" />
    <cf:property name="School" typeName="{0}.School" />
  </cf:entity>

第一个解决方案是使用 uniqueConstraintNames attribute:

<cf:entity name="PayPeriodEstimateHoursSchedule" namespace="DemoCompositeKey">
  <cf:property name="Id" key="true" />
  <cf:property name="Date" typeName="date" />
  <cf:property name="PayPeriod" typeName="{0}.PayPeriod" uniqueConstraintNames="UC1" />
  <cf:property name="School" typeName="{0}.School" uniqueConstraintNames="UC1" />
</cf:entity>

或者定义复合键:

<cf:entity name="PayPeriodEstimateHoursSchedule" namespace="DemoCompositeKey">
  <cf:property name="Date" typeName="date" />
  <cf:property name="PayPeriod" typeName="{0}.PayPeriod" key="true" />
  <cf:property name="School" typeName="{0}.School" key="true" />
</cf:entity>

关于方法,你可以创建一个CFQL方法:

LOADONE(School, PayPeriod) WHERE School = @School AND PayPeriod = @PayPeriod