2015-09-24 4 views
0

Я проектирую db для автозапчастей. Мне нужно создать структуру, где будут группы, подгруппы и автозапчасти. Каждая часть будет принадлежать одной подгруппе, но подгруппа может иметь родительскую подгруппу. Эта родительская подгруппа может принадлежать подгруппе более высокого уровня. В итоге будет только группа - корень. Так что это классическое дерево. Проблема в том, что фиксированного числа групп нет. Иногда это может быть Group -> Sub-Group -> Auto Part, иногда это может быть Group -> Sub-Group -> Sub-Group -> Sub-Group -> Auto Part.Связь на одном столе

Теперь у меня есть три таблицы: группы, подгруппы, автопарки. Как я должен проектировать отношения между подгруппами? Это хорошая идея сделать внешний ключ, называемый родительской подгруппой в таблице SubGroups, который будет ссылаться на другую строку в той же таблице? В случае, если на верхнем уровне имеется только группа, это свойство будет равно нулю.

ответ

0

вы можете сделать все это в 2-х таблиц .... на первом столе просто вставить все группы (родитель)

Теперь в другой таблице .. вставить все суб-суб степени п подгрупп и все п-й номер подгрупп ... Теперь в этой таблице вы добавляете поле с именем (скажем reports_to) , которое будет содержать следующий идентификатор подгруппы. теперь вы можете проверять отчеты о так называемых подгруппах, для которых идентификатор подгруппы ..., который будет его дочерней подгруппой ... и так далее, вы можете продолжить. , когда есть NO Значение в reports_toПоле для подгруппы, а это означает, что это последняя n-я подгруппа этой группы.

Надеюсь, вы поняли, что это будет отлично работать. \ Пожалуйста, отметьте это как ответ, если это поможет.

+0

Благодарим вас за ответ. Есть одна вещь, о которой я беспокоюсь. При вставке новой подгруппы в приложение я еще не буду иметь подсетей. Что делать, если я применил это решение в обратном порядке? Я имею в виду, что поле reports_to будет идентификатором подгруппы более высокого уровня, и когда это поле будет пустым, то подгруппа будет иметь только одну родительскую группу. –

+0

Да, я имел в виду, что только .... вы должны указать id верхней группы id, который будет сообщать. –

+0

Предположим, я добавляю подгруппу в dat-таблицу, ее соответствующий идентификатор report_to будет содержать свой идентификатор подгруппы (означает его родительский (например, xyz) id группы) .... и этот родительский id (xyz) будет содержать основную родительский идентификатор в поле reports_to –

Смежные вопросы