For example, I have 2 tables : ‘customer’ and ‘staff’. They are almost the same, only 2 attributes are different. So should I create another table named ‘person’ contains all of the same attributes of ‘customer’ and ‘staff’ then create fk keys point to this ‘person’? Something like inheritance in class design.
Is there any drawback to this method ?
You’re describing a pattern call Class Table Inheritance. It’s a valid design, but like any other design, it must be used with good judgment. Read Martin Fowler’s “Patterns of Enterprise Application Architecture” for more details on its advantages and disadvantages.
Some people caution against the use of joins, but you need a join only when you need the subclass-specific columns. When a given query only needs the common columns, you can avoid the extra join.