Как создать схему базы данных которая имеет сущность с различными дополнительными свойствами?
Имеется пользователь user, который может быть либо физическим (natural), либо юридическим (legal) лицом. На сколько правильно создавать схему следующего вида: запросы будут с join и сразу оба типа персон, и по раздельности
user
----
id int
person string (legal|natural)
person_legal
----
id int
user_id int
prop_1
...
person_natural
----
id int
user_id int
prop_2
...
или:
user
----
id int
person string (legal|natural)
user_props
-------
id int
user_id
prop
value
у меня опыт небольшой, но хочу поделиться с вами, вдруг поможет.
Есть определенная специфика)
1. Многие поля повторяются и для физ.лиц и для юр.лиц
2. Вы уверены что вас не попросят добавить 3-й и 4-й тип лиц (да, они бывают - например ИП (у них ОГРНИП вместо ОГРН для организаций) или там информационные системы например(они вообще не привязаны ни к какому конкретному лицу, но это уже совсем редкий случай))?
3. Очевидно что организации и ИП - это сущности выше чем обычные юзеры, в организации может быть несколько юзеров. И должностные лица представляющие организацию могут изменяться.
В связи с таким количеством подводных камней, я не знаю какой из ваших вариантов выбрать. Судя по всему - первый, вроде он лучше подходит
Из вариантов выбран первый, хотя тут появилось желание использовать json в качестве значения поля. Но первый случай примечателен тем, что в postgresql есть наследование.