I assume your DRIVERS table has an ID column (I'll call it DID)

Update all NULL DRIVERS.VID entries to (0-DID)

Create a UNIQUE Constraint on DRIVERS.VID

So, a negative VID means no assignment and cannot reference any vehicle.

Rules are slow, avoid them.


Dennis McGrath
Software Developer
QMI Security Solutions
1661 Glenlake Ave
Itasca IL 60143
630-980-8461
[email protected]
From: [email protected] [mailto:[email protected]] On Behalf Of David Blocker
Sent: Tuesday, July 30, 2013 4:02 PM
To: RBASE-L Mailing List
Subject: [RBASE-L] - An unresolved RULES issue from earlier email


Hi friends
I just realized as I temporarily moved forward on my project that an issue I 
wrote to the list about several weeks ago never was resolved.  I?m trying again 
to see if anyone has an idea for a solution.

Here?s the Structure:  VEH (vehicles) table has primary key column VID (vehicle 
ID)
Table DRIVERS (people who drive the vehicles) has Foreign key column VID.

When a driver is assigned a vehicle, the VID column for that driver?s row is 
set to the VID value.

However, there are two wrinkles here:
1)      A Driver may NOT currently be assigned a vehicle, so VID could be NULL
2)      If Driver A has a certain vehicle, say VID = 1, Driver B should NOT be 
allowed to get that vehicle.  In other words, NO TWO RECORDS in Drivers should 
have the same value for VID

So the rule I want would:
1)      Permit Nulls
2)      Forbid two rows in Drivers from having the same value.

A rule is needed, because a Unique Key for VID in Drivers cannot be set up 
unless the column has a NOT NULL constraint.

Here?s the rule that I tried based on some emails back and forth with Bill 
Downall:

    RULES 'Vehicle ID must be either blank or unique: two drivers cannot +
be assigned to the same vehicle' +
    FOR Drivers FAILS +
    WHERE VID IS NOT NULL AND VID IN +
    (SELECT VID FROM DRIVERS d2 WHERE d2.VID = Drivers.VID AND +
d2.DCode <> Drivers.DCode)

This does NOT work.  R:Base DOES allow null values, but it also allows me to 
set multiple rows to the same VID value.

Any ideas?

David Blocker
David Blocker
Email: [email protected]<mailto:[email protected]>
Phone: 781-344-1920
Cell: 339-206-0261

Reply via email to