Really rough notes on relational databases.
Tables should be like string with knots. Any knot can be lifted to re-arrange a tree. Tables have parents and children. Children link only to parents; they do not link to siblings.
However, say table A represents a company, B represents locations, and C represents employees. B and C link to A via primary key. B and C both have addresses stored in table D. B and C reference D with foreign keys. This does not violate the above statement, because, address is a type, a sort of datastructure, and exists on a different plane than our string.
It's best if it's impossible to put bad or incoherent data in the database. For example PG can be given logic like "this column cannot be null if that column is a certain integer".