Σωτήρη, αυτό που σε απασχολεί, με απλά λόγια (και αν κατάλαβα καλά), είναι κάτι σαν το παρακάτω:
Πίνακας: ΕξάρτημαΥπολογιστή
Πεδία: ΕξάρτημαID, ΚατηγορίαID, Περιγραφή, ΣειρΑρΕξαρτ, Slots, ΜητρικήTypeID, ΠεριγραφήΜητρικής
Αν υποθέσουμε ότι κάθε εξάρτημα έχει ένα μοναδικό σειριακό αριθμό (πχ κάτι σαν GUID) τότε το PK είναι το ΕξάρτημαID ενώ παράλληλα το ΣειρΑρΕξαρτ προσδιορίζει και πάλι μοναδικά την κάθε εγγραφή. Τα πεδία Slots, ΜητρικήTypeID, ΠεριγραφήΜητρικής έχουν νόημα μόνο όταν η εγγραφή αφορά σε motherboard και όχι σε κάρτα γραφικών, οποτε ο πίνακας θα πρέπει να σπάσει σε δύο. Ο πρώτος θα είναι το ΕξάρτημαΥπολογιστή(ΕξάρτημαID, ΚατηγορίαID, Περιγραφή) και ο δεύτερος σε Μητρική(ΣειρΑρΜητρ, Slots, ΜητρικήTypeID, ΠεριγραφήΜητρικής)
Τώρα, όλα τα παραπάνω που λέει ο Codd είναι πολύ καλά αλλά μερικές φορές έρχεται η ώρα να κάνουμε τα στραβά μάτια
Δεν μιλάω για την περίπτωση που σπάμε την κανονικοποίηση για λόγους performance (πχ κάνουμε prepopulate lookup πεδία και δημιουργούμε computed columns) αλλά για την προσπάθια να παντρέψουμε το σχεσιακό μοντέλο με το OO μοντέλο.
Για παράδειγμα, έχουμε έναν πίνακα με αυτοκίνητα (Car). Όλα τα αυτοκίνητα έχουν CarID, BrandName, ModelName. Ωστόσο στο OO μοντέλο μας έχουμε το FamilyCar subtype και το SportsCar subtype. Το FamilyCar έχει DrawingHook attribute ενώ το SportsCar έχει Cabrio attribute. Κάτι τέτοιο μπορούμε να το μοντελοποιήσουμε με δύο τρόπους:
Car(CarID, BrandName, ModelName, CarType, DrawingHook, Cabrio)
To πεδίο CarType είναι ο discriminator και έχουμε κάνει την παραδοχή ότι 1=FamilyCar, 2=SportsCar. Όταν έχουμε FamilyCar το πεδίο Cabrio είναι Null και όταν έχουμε SportsCar το πεδίο DrawingHook είναι Null.
O δεύτερος τρόπος είναι να κάνουμε κάτι σαν το παρακάτω:
Car(CarID, BrandName, ModelName)
FamilyCar(CarID, DrawingHook)
SportsCar(CarID, Cabrio)
Το CarID είναι PK σε όλους τους πίνακες και υπάρχει 1:1 σχέση Car<->FamilyCar και Car<->SportsCar
Ξέφυγα λίγο από το αρχικό πρόβλημα αλλά πιστεύω ότι είναι προφανές ότι η πράξη μερικές φορές απέχει από τη θεωρία. Θα μου πείτε, "γιατί να μην σχεδιάζουμε τη βάση πάντοτε με τη δεύτερη τεχνική ώστε να είμαστε Codd-compliant". Έλα μου ντε που μπορεί να χρησιμοποιούμε κάποιο O/R mapper που να καταλαβαίνει ιεραρχίες μόνο όταν απεικονίζονται με τον πρώτο τρόπο 
Vir prudens non contra ventum mingit