Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Структура данных
ApuktaChehov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Мастер на все руки
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2151
Пользователь №: 6120
На форуме: 8 лет, 3 месяца, 6 дней
Карма: 59

Не курю:
31 год, 7 месяцев, 16 дней


Приветствую всех. Давненько я тут не писал, но настала пора...

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

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

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

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

Спасибо.



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

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

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

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

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

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

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

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

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


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 12 дней
Карма: 77




id - Родитель/Потомок - сущность ?
для каждого элемента.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ApuktaChehov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Мастер на все руки
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2151
Пользователь №: 6120
На форуме: 8 лет, 3 месяца, 6 дней
Карма: 59

Не курю:
31 год, 7 месяцев, 16 дней


Связь не родитель-потомок.
Это я описал так.
Сущности могут быть связаны как угодно. О том, как она связаны говорит связь, а не сами сущности.

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


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 269
Пользователь №: 39616
На форуме: 2 года, 6 месяцев, 27 дней
Карма: 31




Цитата (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


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ApuktaChehov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Мастер на все руки
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2151
Пользователь №: 6120
На форуме: 8 лет, 3 месяца, 6 дней
Карма: 59

Не курю:
31 год, 7 месяцев, 16 дней


Причем тут ООП?

Ну вот, создадим человека. И предположим, создадим их миллион.
Мне нужны все люди, у которых нет левого глаза.

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

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


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 269
Пользователь №: 39616
На форуме: 2 года, 6 месяцев, 27 дней
Карма: 31




Тогда еще один тэг: #фасетныйпоиск


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ApuktaChehov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Мастер на все руки
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2151
Пользователь №: 6120
На форуме: 8 лет, 3 месяца, 6 дней
Карма: 59

Не курю:
31 год, 7 месяцев, 16 дней


О, это интересно. Спасибо!
Близко, но не совсем то.

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

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

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


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Oyeme  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Reality is wrong. Dreams are for real
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1677
Пользователь №: 16955
На форуме: 7 лет, 9 месяцев, 15 дней
Карма: 94




Что мешает создать таблицу связей?

Таблица обьекты,связи и тип связей

В тип связей прописываем что за свясь итд

Соотвественно построенная модель иерархического дерева

C графами это модель более эластична

http://www.alberton.info/graphs_in_the_dat...ml#.V9gA6JMrJTY


--------------------
Programming: Private lessons via skype £45/h

Частные уроки в Лондоне / удаленно по skype.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ApuktaChehov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Мастер на все руки
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2151
Пользователь №: 6120
На форуме: 8 лет, 3 месяца, 6 дней
Карма: 59

Не курю:
31 год, 7 месяцев, 16 дней


Я об этом уже думал. Это как отношение "все ко всем".
Объект 1
Объект 2
Описание как они связаны.

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

Сейчас я думаю над тем, что будет, если связи тоже буду объектами.

Спс. Про графы почитаю.


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 9 месяцев, 3 дня
Карма: 15




Похоже для твоей задачи лучше подходит графовая база данных, не реляционная. Тогда сущности можно представить вершинами графа, а их связи ребрами. Самая популярная графовая база neo4j.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
ApuktaChehov  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Мастер на все руки
******

Профиль
Журнал
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2151
Пользователь №: 6120
На форуме: 8 лет, 3 месяца, 6 дней
Карма: 59

Не курю:
31 год, 7 месяцев, 16 дней


Спс wink.gif


--------------------
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса