Mysql Первоначальное проектирование БД

Ник138

Новичок
Добрый день!

Передо мной встала задача создать базу данный (MySQL) комплектующих и выводить информацию на локальный сайт (сервер apache или nginx) при помощи php.

Имеется узел в него могут входить платы, модули, блоки и т.д.
При этом некоторые платы и модули могут входить в иные узлы и изделия.

Как грамотно организовать хранение бд с последующим ее ростом для вывода состава выбранного узла/изделия?

Мое видение:
1. Для начала создам таблицу со всеми уникальными компонентами (табл.1):
id, desc (описание: плата, блок, узел и т.д.), name (наименование, обозначение), spec (шифр, кодовое обозначение), decimal (децим. номер)
2. Вторая таблица - таблица связей (табл.2):
id, id_par (родитель), id_child (ребенок), qty (кол-во в ед.), (scheme (схемат. номер) !!! если несколько, то и схем. номера разные)

Таким образом, для просмотра состава того или иного узла, я делаю заброс к табл. 2 и при помощи рекурсии делаю обращение к табл.1, пока результат обращения к табл.2 не станет равным нулю.

Грамотно ли я организовал структуру бд и запросы к ней?
Допустим, если модуль, имеет больше 10 вложений, не слишком ли такой запрос нагрузит сервер? Не имеет ли смысл делать промежуточную таблицу и время от времени ее актуализировать отдельным запросом.
 

AnrDaemon

Продвинутый новичок
А это зависит от поставленной задачи.
Если стоит вопрос только в том, чтобы узнать "сколько тут чего", то в общем грамотно. Вот только в таблице связей id лишняя, а id_child должна идти вместо неё.
Что имеется в виду под "схематическим номером" - вам виднее. Из приведённой двухтабличной схемы этого не понять.
Если стоит задача не только складировать (по количеству) но и хранить схемотехнику, то двух таблиц мало.
 

fixxxer

К.О.
Партнер клуба

Ник138

Новичок
А это зависит от поставленной задачи.
У меня задача, выбрав узел, получить список/дерево из комплектующих. Схем. номер - место на плате (в приборе).
В дальнейшем, дополнительно будут подгружаться цены с последующим вывод в файл (спецификацию) для заключения договора поставки.

Про остальные методы nested sets, recursive CTE, closure tables - почитаю. Спасибо за ответы и направления.
Но для меня на данный момент важно - именно проектирование БД, чтобы потом не было мучительно больно все переделывать.
 
Сверху