Subject | Re: [firebird-support] Unique constraint vs unique index, why do they have to be different? |
---|---|
Author | Helen Borrie |
Post date | 2003-12-14T04:42:37Z |
At 10:31 AM 14/12/2003 +0700, you wrote:
constraint has rules, one of which is that it requires a unique index to
enforce a rule.
tradition) the system-created index enforcing a constraint got a mandatory,
nasty, system-generated name. OK, 1.5 has made the naming of constraints
and their indexes much nicer - you can now incorporate a USING clause in a
constraint definition to assign your own name to a constraint's index,
while the new default behaviour is for the system to apply the name of the
constraint as the index's identifier. It's not so long ago in IB's history
that the names of sys-generated indexes did not survive a restore, so
explicit plans got broken if you used the constraints' indexes in them.
Another is that you can't disable a constraint's index using ALTER INDEX
inactive; and you can't delete it, either. You have to drop the constraint.
/heLen
>Sorry, what I meant was "by using a unique index, don't we effectivelyYes. So, if all you want is uniqueness, you only need the index.
>achieve uniqueness of column"?
>True, FB still requires unique constraintBecause an index is not a constraint and a constraint is not an index. A
>declaration (not unique index), and that's what I am questioning. If a
>column is being uniquely indexed, why doesn't the column automatically
>become eligible for being referenced by an FK?
constraint has rules, one of which is that it requires a unique index to
enforce a rule.
> > It's there toOne is that you can can name an index anything you like, whereas (by
> > -- cater for people like yourself who want to reference columns other than
> > the PK in FK relationships. Dependencies are created on keys, not indexes.
>
>Okay, but what is the [effective, visible] difference between a unique
>index on a column and a unique key (not PK)?
tradition) the system-created index enforcing a constraint got a mandatory,
nasty, system-generated name. OK, 1.5 has made the naming of constraints
and their indexes much nicer - you can now incorporate a USING clause in a
constraint definition to assign your own name to a constraint's index,
while the new default behaviour is for the system to apply the name of the
constraint as the index's identifier. It's not so long ago in IB's history
that the names of sys-generated indexes did not survive a restore, so
explicit plans got broken if you used the constraints' indexes in them.
Another is that you can't disable a constraint's index using ALTER INDEX
inactive; and you can't delete it, either. You have to drop the constraint.
/heLen