Универсальная структура БД

194
01 апреля 2017, 01:35

Хотел написать универсальный каркас для веб приложений, но столкнулся с проблемой проектирования БД. Задумка в следующем: Есть категории, типы, элементы(ноды). Ноды могут быть любого типа и относится к любой категории. У ноды может быть связь с дочерними элементами. Например: нода типа "город", включает в себя ноды с типами "улица" и "река". Не соображу как построить базу для таких отношений.

Answer 1

Очевидным решением является использование Документ-ориентированной СУБД. Если же задача требует использования именно Реляционной СУБД, то логичным решением, на мой взгляд, будет реализация Документ-ориентированной схемы в контексте Реляционной СУБД.

Для этого можно использовать следующую модель:

Соответственно каждая конкретная Нода (Node) это запись в таблице Node, определяющая только имя класса, который будет использоваться для инкапсуляции данных при загрузке из базы. Таблица Value, в свою очередь, содержит не только данные типа "Свойство - Значение", но и ссылку на Ноду, к которой эти данные относятся, а так же идентификатор объекта.

Остается реализовать только загрузчик, который будет соответствовать следующей семантике:

interface ObjectRepository{
  public Entity find(id, Entity);
}

Реализовать это не сложно, но нужно помнить, что решение довольно "тяжелое", так как лишено плюсов Реляционной и Документ-ориентированной СУБД. К счастью, качественный слой абстракции позволит всегда оптимизировать структуру такой БД перенеся часть сущностей в отдельные таблицы.

Answer 2

В Drupal сделано похожим образом. Только там node это посты, а вот taxonomy - это термины которые можно структурировать parent->child. Еще отдельно табл для настроек типа key->value

Answer 3

Сделать две таблицы.

В первой хранить все узлы:

node_id|node_name
1      |City
2      |Street
3      |River
4      |House
5      |Fish

Во второй обозначать связи

child_id|parent_id
2       |1
3       |1
4       |2
5       |3
Answer 4

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

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

READ ALSO
отправка письма с помощью sendmail

отправка письма с помощью sendmail

2 день пытаюсь найти решение в интернете не получается, многое что перепробовал надеюсь вы мне помочь сможете использую Xampp)

206
Ошибка при подключении базы данных с помощью redbeanphp

Ошибка при подключении базы данных с помощью redbeanphp

Здравствуйте, пишу регистрацию для сайтаПодключаю базу данных и пишет ошибка:

300
Добавить узел в бинарное дерево

Добавить узел в бинарное дерево

Мне нужно добавить узел в бинарное дерево, чтобы вышло так: "Binary Tree is a kind of orderly table"Условие задачи:

202
Как посмотреть код через дизассемблер ildasm? Выдает ошибку

Как посмотреть код через дизассемблер ildasm? Выдает ошибку

Visual Studio 2015Хочу посмотреть код через дизассемблер

556