Normally every table have primary key OR foreign key
This is wrong. Database implementations don't mandate either on a table and they are not mutualy exclusive. A table
should contain a primary key and may contain one or more foreign key fields.
Your example is making the same mistake as Carsten made in his original code; primary key != row id.