"Mark one box only" looks like an integrity constraint. But if we impose it we end up recording less information. The real world is messy; we often need relaxed constraints in order to record partial information about the world.
Consider the supplier relvar which records the extension of the following predicate:
There exists a supplier under contract identified by supplier number [SNO] with name [SNAME] having status [STATUS] and located in city [CITY]
SNO | SNAME | STATUS | CITY |
---|---|---|---|
S1 | Smith | 20 | London |
S2 | Jones | 10 | Paris |
S3 | Blake | 30 | Paris |
S4 | Clark | 20 | London |
S5 | Adams | 30 | Athens |
It is assumed this relvar has key {SNO}. That's a key constraint; it implies the FD constraint
FD: {SNO} --> {SNAME,STATUS,CITY}
Generally speaking FDs are incompatible with partial information.
Putting it another way, if we only have partial information about a given supplier, then we are unable to record any information about them using this predicate.