Let's say we have a Person relation, and with that Employee which IS-A Person, Manager, which ISA Person as well.
What is the correct way to ensure that a Manager isn't an Employee and vice versa ?
I didn't know what to look for when asking the question, there most likely already exists an answer to that question.
Person (PK:personId, name, ...);
Manager(PK:#personId); -- A manager ISA person
Employee(PK:#personId); -- An employee ISA person
INSERT INTO Person (1,'Peter',...);
INSERT INTO Manager (1); -- OK
INSERT INTO Employee(1); -- Nope, error.
Person cannot be at the same time an employee and a manager.
Maybe with another example.
Shape (shapeId);
Rectangle(shapeId, width, length);
Circle(shapeId, radius);
Circle is a shape, Rectangle is a shape, how do I ensure Rectangle is not a Circle (and vice versa)?
Hence my question, What is the correct way to enforce unique "IS-A" relationship?
Best Answer
Relation
Application
that refer to thePerson
andPosition
relations should have uniquepersonID
attribute and should have the single attributepositionID
that can have one and only one value at once.