Let's say I have a database in which one entity (i.e. table) inherits from another one, for example:
Table 1
, named person
: (name,surname)
Table 2
, named car_owner
In this case, car_owner
inherits from person
, i.e. a car-owner
IS
a person
.
I'm now in a point where I have to decide whether I should:
car_owner
, even though it has no extra columns except the ones in person
, although in the future this might change => doing this results in car_owner
= table with columns (id,person_id)
, where person_id
is FK
to person
or
person
table for now and only do (1) when/if
extra information regarding a car-owner
will appear => note that if I do this FK
s to a car-owner
from other tables would actually be FK
s to the person
tableThe tables I'm dealing with have different names and semantics and the choice between (1) and (2) is not clear, because the need for extra columns in car_owner
might never pop-up.
Conceptually, (1) seems to be the right choice, but I guess what I'm asking is if there are any serious issues I might run into later if I instead resort to (2)
I would suggest that option 1 is the better answer. While it creates more work to join the tables for queries, it is neater to put "optional" data in it's own table. And if more types of persons are required (pedestrian, car_driver, car_passenger) they can be accommodated with more child tables. You can always use a view to make them look like one table.
BTW for databases, we say Parent and Child, not "inherets".
To answer the part about problems/consequences of option 2 - well, none too serious. This is a database, so you can always re-arrange things later, but there will be a price to pay in rewriting queries and code if you restructure tables. Why I don't like Option 2 is because it can lead to extra tables not re-using the person part. If it looks like that table is for car_owners, I might make an entirely new table for car_passengers with duplication of all the person columns. In short, nothing too tragic should happen with either approach, they are each preferable for different reasons and the drawbacks are mainly inconvenience and potential future messiness.