[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Структура данных
ApuktaChehov
Приветствую всех. Давненько я тут не писал, но настала пора...

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

Нужно создать модель данных, где каждый элемент может быть связан с другим элементом и эта связь не должна быть ограничена чем-либо.

Дело в том, что в классике, сущности связываются внешними ключами. Но тут таких внешних ключей быть не может, т.к. теоретически абсолютно любое свойство сущности может выступать внешним ключом.

Может это уже все было в Симпсонах. Но я с таким еще не сталкивался.

Спасибо.



Что я уже надумал.

Необходимо создать базовые сущности у которых из "зашитых" реквизитов есть только название.
Для примера:

Собака
Имя
Пуговица
Пол
Человек
Автомобиль
Пальто
Колесо
Нитка

Далее эти сущности ссылаются на другие такие же сущности.

Собака -> имя, пол.
Человек -> имя, пол, собака, автомобиль, пальто.
Автомобиль -> имя, колесо.
Пальто -> пуговица, нитка.

Мне по первой мне казалось, что это просто набор характеристик какой-либо сущности. Но это не так.
Если в фокус взять, например нитку, то можно создать еще сущностей(материал, производитель, прочность и т.д.).

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

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

Короче тут я подвис.

_____________
Kusss
id - Родитель/Потомок - сущность ?
для каждого элемента.
ApuktaChehov
Связь не родитель-потомок.
Это я описал так.
Сущности могут быть связаны как угодно. О том, как она связаны говорит связь, а не сами сущности.

"Человек" просто ссылается на "имя". "Имя" и "человеком" никак не связаны друг с другом иначе.

_____________
brevis
Цитата (ApuktaChehov @ 13.09.2016 - 11:48)
Причем в "автомобиле" может быть материал которые так же ссылается на эту же "нитку" или "пуговицу".

Че, прям на эту же? Может быть на точно такую же, но другую? :)

По-моему такой пример есть во всех книжках про ООП на первых сраницах.
Тэги: #наследование, #агрегация, #one-to-many, #doctrine (что бы увидеть магию)

class Entity {

/** @var string */
protected $name;

/** @var mixed */
protected $value;

/** @var Entity (parent entity)*/
protected $entity;

/** @var Entity[] (child entities)*/
protected $entities = array();

public function __cunstruct($name, $value = null) {
$this->name = $name;
$this->value = $value;
}

public function addEntity(Entity $entity) {
$entity->setEntity($this);
$this->entities[] = $entity;
}

public function setEntity(Entity $entity) {
$this->entity = $entity;
}

}


$leftEye = new Entity('Left eye');
$rightEye = new Entity('Right eye');

$head = new Entity('Head');
$head->addEntity($leftEye);
$head->addEntity($rightEye);

$body = new Entity('Body');
$body->addEntity($head);

$name = new Entity('Name');

$sexualOrientation = new Entity('Sexual orientation');

$man = new Entity('Man');
$man->addEntity($body);
$man->addEntity($name);
$man->addEntity($sexualOrientation);

// ну и в иделале Entity -- это просто базовый класс
// а конкретная сущность -- это отдельный класс, унаследованный от Entity


_____________
Чатик в телеге
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.