Вопрос проектирования (юр. и физ. лица)

maxon

Новичок
Вопрос проектирования (юр. и физ. лица)

Есть два типа клиентов: физ. лица и юр. лица. Каждый тип имееет разный набор атрибутов, следовательно хранить в одной таблице их нельзя. Есть два варианта:
- хранить их в разных таблицах, выборку делать по двум таблицам с UNION.
- хранить в одной таблице данные, которые одинаковы как у физиков так и у юриков, а отличающиеся атрибуты, выносить в соответсвующие таблицы со связью (например для юр. лиц - таблица реквизиты, для физ. лиц - таблица паспортные данные).

В случае с первым вариантом возникает проблема идентификации пользователя в таблице заказов, два пользователя (юр. и физ. лицо) могут иметь одинаковый ключ, следовательно в таблице заказов их заказы могут пересекаться.

Как обычно поступают?
 

BOJIK

Новичок
maxon

Я обычно использовал второй вариант. Хотя есть вариант хранить все в одной таблице, оставляя какие-то поля незаполнеными.
 

maxon

Новичок
спасибо, еще варианты будут? Говорят, большое количество пустых полей, сказывается на скорости выборки.
 

Vladson

Сильнобухер
maxon
Второй вариант мне кажется предпочтительнее и по моему мнению он должен быть быстрее, хотя на счёт скорости это субъективное мнение так-как не задавался этим вопросом и по этому не проверял на практике.
 

BOJIK

Новичок
maxon

хмм.. скорость выборки зависит от многих факторов: количества записей, запросов, идексов, загруженности СУБД и тд

Под каждую задачу оптимизировать структуру БД надо отдельно и только практика покажет какой вариант будет быстрее (как в разработке так и в работе) для твоей конкретной задачи.
 

maxon

Новичок
решил перейти на вариант с отдельными таблицами под реквизиты и паспортные данные. По крайней мере не будет нарушаться нормальность. И ключи не будут дублироваться. К тому же тип клиента будет однозначно идентифицироваться соответствующим полем "тип".
 

clevel

Новичок
3. первая таблица - спсиок юзеров (id,name,type(физик/юрик))
вторая - userid,field,content

сколько угодно полей заводи для любого типа пользователя..
 

MuXa247

Новичок
Автор оригинала: clevel
3. первая таблица - спсиок юзеров (id,name,type(физик/юрик))
вторая - userid,field,content

сколько угодно полей заводи для любого типа пользователя..
Так же делал.. Только в общей таблице еще общие системные данные пользователя, вроде логина/пароля, даты регистрации/последнего входа, активен/забанен юзер и т.д.
 
Сверху