18:47 

alhames
alhames.ru
Ребят, я иссяк. Может у вас будут идеи:
как хранить многомерный массив в плоской базе данных (MySQL), так чтобы удобно можно было организовывать поиск по всем элементам?
К примеру:
{
id: 1,
name: 'Иванов Иван Иваныч',
mother: {
id: 2,
name: 'Иванова Ивания Ивановна'
},
father: {
id: 7,
name: 'Иванов Абдула Иванович'
},
hobby: [
[{name: 'Спорт',id: 334},{name: 'Велосипед',id: 745}],
[{name: 'Телевизор',id: 644},{name: 'Дом 3',id: 838}]
]
}

И после к примеру мне нужно будет сделать выборку всех людей, кто увлекается спортом, всех людей кто увлекается ездой на велосипедах, или кто не смотрит дом 3. Как?

Комментарии
2012-05-09 в 20:23 

Inty
Жизнь - это что-то!
Таблица People
поля:
People_id - первичный ключ
People_name - ФИО
People_id_mother - id человека из этой же таблицы
People_id_father - id человека из этой же таблицы


Таблица Hobby
поля:
Hobby_id - первичный ключ
Hobby_name - Название хобби


Таблица People_Hobby
поля:
People_id
Hobby_id

Перчисляешь все группы, мол у человека с People_id=3 есть хобби с Hobby_id=10
Дальше все запросы строишь с помощью Left join

SELECT * FROM People as p_tab
LEFT JOIN People_Hobby as p_h_tab
ON p_tab.People_id =p_h_tab.People_id
where p_h_tab.Hobby_id="3"
//где 3 - это код какого-то хобби, к примеру езды на велике.

2012-05-09 в 20:45 

alhames
alhames.ru
Inty, это самый простейший пример, количество сущностей неизвестно и очень велико.
Создавать 100+ таблиц не вариант.

2012-05-09 в 21:29 

Inty
Жизнь - это что-то!
alhames, если для человека вариант 1 к 1, то все запихиваем в таблицу People, иначе делаем отдельные таблицы. Иначе много ресурсов будет затрачено на обработку данных.

Еще вариант
People оставляем.

Делаем таблицу Other
Other_id
Other_name
Type_id

Type
Type_id
Type_name

People_Other
People_id
Other_id

в Type перечисляете все ваши : хобби, увлечения и остальные сущности.

2012-08-13 в 12:05 

Стремительный крылорук
Муха - это маленькая птичка!
Две таблицы: Сущности и Связи

Сущности:
ID1 Вася
ID2 Велосипед
ID3 Васина мама

Связи:
ID1 ID2 Хобби
ID1 ID3 Родственники

Ну примерно так : )))

P.S. Возможна третья таблица - Типы связей

Типы связей:
ID1 Родственники
ID2 Хобби

В таком случае вторая таблица (Связи) содержит только IDшники.

2012-08-13 в 13:43 

Стремительный крылорук
Муха - это маленькая птичка!
Кстати что Вы подразумеваете под ПЛОСКОЙ базой? Базу без связей между таблицами? O_O

2012-08-13 в 21:02 

alhames
alhames.ru
Кстати что Вы подразумеваете под ПЛОСКОЙ базой?
Плоская === двумерная. Просто в идеале помимо осей x (rows) и y (fields) нужна еще и z.

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

     

@web-программирование

главная