David,

In order for the rule to fail, the VID must be null, and the VID also must
be found in the lookup. I would have a hard time fining any rows that would
fail under those conditions.

Your reversing of the logic from the SUCCEEDS version got twisted too much,
because you changed the OR to an AND, and you also changed the NOT IN to an
IN.

Did you try the SUCCEEDS syntax I came up with originally? Did it also not
work? I know it violates our tried and true DMB methodology, but it is
easier to read and mentally translate into English.

Bill

RULES +
'Another driver is already assigned to that vehicle' +
FOR Drivers +
SUCCEEDS +
WHERE VID IS NULL +
OR NOT EXISTS +
(SELECT * FROM Drivers d2 +
  WHERE d2.VID = Drivers.VID AND d2.DriverID <> Drivers.DriverID)


On Tue, Jul 30, 2013 at 5:01 PM, David Blocker <
[email protected]> wrote:

>
>
> 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]
> Phone: 781-344-1920
> Cell: 339-206-0261
>
>

Reply via email to