Developers can define different kinds on constraints on model attributes. The general grammar of constraints are defined in the TQL Model grammar There are two types of references
- Simple Reference
- Smart Reference
Simple Reference
Simple reference is defined using name and type modifier. The data associations between two models is automatically done via SID.
Unique Constraint on Attribute LightNumber
<Reference cardinality="1..1" name="reference name" type="name of model/def"/>
In this example thingCat is a reference attribute of VendorInfo. thingCat References 1 (cardinality is 1) instance of ThingCategory. The value of thingCat must be the SID of the ThingCategory instance.
Unique Constraint Violation Error
<DataModel Name="VendorInfo"> <Sid Name="vendorId"/> <String Name="vendorName"/> <String Name="vendorCity"/> <Reference cardinality="1..1" name="thingCat" type="ThingCategory"/> </DataModel> <DataModel Name="ThingCategory"> <Sid Name="thingCatID"/> <String Name="catList" cardinality="1..n"/> </DataModel> <!-- Let's Create few Thing Categories. --> <Query> <DeleteAll> <ThingCategory> <thingCatID ne=""/> </ThingCategory> </DeleteAll> <Create> <ThingCategory> <catList> Sensors </catList> </ThingCategory> </Create> <Create> <ThingCategory> <catList> Actuators </catList> </ThingCategory> </Create> <Create> <ThingCategory> <catList> Sensors </catList> <catList> Actuators </catList> <catList> Gateways </catList> </ThingCategory> </Create> </Query> <!-- Now create VendorInfo with ThingCategory SID Value --> <Query> <Create> <VendorInfo> <vendorId> vendorA </vendorId> <vendorName> Phidget </vendorName> <vendorCity> Calgary </vendorCity> <thingCat> LOBF4FOGAAAX6AAAAGEWWHEH </thingCat> </VendorInfo> </Create> </Query> <!-- Let's do a Find on VendorInfo with nested * --> <Query> <Find format="all" nested="*"> <VendorInfo> <vendorId ne=""/> </VendorInfo> </Find> </Query>