2015-08-05 3 views
1

Я борющимся с проектирования баз данных выпуска, и это своего рода долго наматывается один:Строительные организации с подгруппами

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

Я могу вытащить его, сделать поток разумным на бумаге. Когда дело доходит до того, что он поместил его в SQL, я потерялся. Большинство справочных руководств там предполагают статические группы, поэтому простая настройка первичного и внешнего ключей может ссылаться на нужную информацию. У меня есть слишком большая динамическая информация для большинства из них для прямой работы, насколько я ее понимаю.

Большинство писателей говорят, что держаться подальше от динамически созданных таблиц, но это то, куда меня ведет мой инстинкт. Еще одна идея, которая у меня была, - это 3 массивные таблицы для всех организаций, групп и профилей.

Так есть ли лучший способ сделать это? Или есть хорошие документы, которые я должен прочитать, чтобы помочь мне перевести с рисунка на фактический код?

У меня есть опыт работы с SQL и MongoDB, если это помогает объяснить вещи.

+0

Почему это помечено как MySQL, так и MongoDB - две разные системы? Ваша идея трех «массивных» таблиц, по-видимому, будет правильным подходом. –

+0

Я не был уверен, что мне не хватает чего-то с тем, что может сделать это проще. В настоящее время я на начальной стадии проектирования, поэтому у меня есть место, чтобы идти в любом случае. – CodeDragonDM

ответ

1

Я не знаю о MongoDB (NoSQL), но с точки зрения SQL, вот мое мнение.

Что касается вашей схемы, большую часть времени, когда ваш «инстинкт» указывает на то, что: - Только решение «Динамические таблицы» - ваш лучший выбор, для некоторой проблемы, над которой вы работаете.

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

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

Назад к вашей проблеме: - Если ваша организация hirerchy состоит из трех основных типов объектов/уровней, а именно: Организаций, групп и профилей, то я бы посоветовал вам пойти с 3 таблицами с правильными отношениями, которые любой SQL-движок является тихим эффективным при обработке, по сравнению с созданием таблиц во время выполнения.

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

+0

Это не должно быть рекурсивным, выдерживать до трех слоев. Я попытался смоделировать это, и мне кажется, мне нужны как минимум 3 дополнительные статические таблицы, для членства в организационных и подгруппах, а также для подгрупп организации. У конечного профиля будут внешние ключи для организации и подгруппы, к которой она принадлежит, а также основной пользователь в учетной записи. Но если есть несколько пользователей, которые могут иметь вторичный статус в учетной записи, мне нужно будет создать другую таблицу? Или что-нибудь еще, что может помочь, что я пропал? – CodeDragonDM

+0

** «если есть несколько пользователей, которые могут иметь вторичный статус в учетной записи» **, поскольку «учетные записи» могут иметь несколько пользователей (один первичный и другой вторичный), вы всегда можете создать отношение «один ко многим» в новой таблице named 'userstatus' там столбцы будут' id, userid, accountid, type', где тип может быть логическим, 0 - вторичным, а 1 - первичным. –

+0

Спасибо, это помогает мне моделировать мою логику, поэтому я могу построить ее с помощью любой структуры базы данных, в которой мы в конечном итоге используем! – CodeDragonDM

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