Re: Problem with UNIQUE constraint

On 28 Mar 2002 at 8:58, Jeni Tennison wrote:

> Hi Gary,
> 
> >> By the way, I think that you're probably using the identity constraint
> >> incorrectly. If you want to test that each Rec_SelRadioSrvc element
> >> has a unique combination of LineID and RadioService, then you need to
> >> place the identity constraint on the declaration of the element that's
> >> the *parent* of the Rec_SelRadioServc element, as follows:
> >> 
> >>   <xs:unique name="ID_SelRadioSrvc">
> >>     <xs:selector xpath="Rec_SelRadioSrvc"/>
> >>     <xs:field xpath="LineID"/>
> >>     <xs:field xpath="RadioService"/>
> >>   </xs:unique>
> >> 
> >> As you currently have it, all you're testing is that the LineID and
> >> RadioService of one Rec_SelRadioSrvc at a time. There isn't much point
> >> doing that unless you're using the identity constraint sneakily to
> >> test a co-occurrence constraint, which I don't think is the case here.
> >
> > Yes, you are quite right.  I need to change the selector xpath to "*".
> 
> Well, you can do, but that won't make any difference unless you also
> move the xs:unique identity constraint into the element declaration
> for the element that contains the elements that you want to test for
> uniqueness. If you keep the xs:unique where it is, and just change the
> selector xpath, then you'll be testing whether each child element of
> the Rec_SelRadioSrvc (i.e. the LineID and RadioService elements) have
> a unique combination of LineID and RadioService child elements, which
> I doubt is what you're after.
> 
> The location where you place the xs:unique determines the scope of the
> identity constraint. The xs:selector selects the elements that should
> be unique. The xs:field elements identify the fields on which those
> elements should be unique.

This is a database application.  The LineID and RadioService fields 
are the primary key of the Rec_SelRadioSrvc table; a multi-field 
key.  So, if I understand what you are saying I should move the 
UNIQUE constraint into the element containing Rec_SelRadioSrvc 
or into the root element (since there aren't any other tables with the 
name "Rec_SelRadioSrvc").  And leave the selector as is.  
Correct?  Thanks for your help! :-)

--
Gary Cramblitt
garycramblitt@comcast.net

Received on Thursday, 28 March 2002 20:56:38 UTC