Эффективность mysql: самообъединение против разделения двух таблиц

Мне просто интересно, с точки зрения дизайна, эффективности и пространства, что лучше выбрать? Самостоятельное объединение или использование двух таблиц, а затем их объединение?

У меня есть база данных MySQL, в которой хранятся детали дизайна продукта, designer_type может быть либо company_staff, либо определенным customer_type.

Сначала я думал о 2 таблицах, одна с именем staff_design, а другая с именем customer_design.

В любом случае информация design остается почти такой же, за исключением того, что если это клиент, есть два дополнительных столбца, которые не нужны staff_design, один из которых является внешним ключом к идентификатору staff_design, а другой — design_name (что-то вроде которые могут добавлять пользователи, а не персонал). Оба из этих двух столбцов могут быть NULL.

Поэтому, если я спроектирую базу данных таким образом, что эти две таблицы объединены и есть только одна таблица design, тогда эта таблица будет иметь 3 дополнительных столбца, которые могут быть NULL довольно часто: в ней должно быть design_type (с указанием customer или staff) , а затем два дополнительных столбца, о которых я упоминал выше. (design_name и staff_design ФК).

Какой дизайн лучше?

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

Что считается профессионально лучшим подходом? Ожидается, что сотрудники staff_designers сохранят тысячи дизайнов, в то время как только продвинутые пользователи и клиенты с дополнительной оплатой будут сохранять собственные индивидуальные дизайны. Таким образом, определенно будет гораздо больше дизайнов для сотрудников, чем дизайнов для клиентов.


person user961627    schedule 02.10.2012    source источник
comment
Можете ли вы добавить некоторую информацию о порядке количества записей в таблице design (в случае одной таблицы).   -  person bpgergo    schedule 02.10.2012
comment
отредактировал вопрос, чтобы добавить его в конец.   -  person user961627    schedule 02.10.2012


Ответы (3)


Поскольку порядок записей составляет всего несколько тысяч, я предлагаю перейти к дизайну с одной таблицей. Это облегчит вам жизнь, а размер таблицы не оправдывает оптимизацию разделения таблицы.

person bpgergo    schedule 02.10.2012

Если это облегчит вам жизнь, нет ничего плохого в том, чтобы объединить все в 1 единую таблицу, если я хорошо понял ваш дизайн.

Особенно, если ваша база данных Mysql использует механизм Innodb: поля NULL не занимают места ( или незначительное количество, 1 бит или около того).

person mbarthelemy    schedule 02.10.2012

То, что у вас здесь, по сути, является наследованием (также известным как категория, подтип, иерархия обобщения и т. д.).

Из 3 возможных способов его реализации вы описываете "все классы в одной таблице". В этом нет ничего плохого — у каждого способа есть свои плюсы и минусы, и в вашем случае подходит именно этот.

person Branko Dimitrijevic    schedule 02.10.2012