многие-ко-многим или ...?

Crizis

Guest
многие-ко-многим или ...?

не нашёл ответа на существующую проблему, поэтому создаю тему.
итак, существует, предположим, таблица новостей (news) с полями id (primary), text

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

предположим, можно создать отдельную таблицу с хранением связей по индексу новости

1. новость1 -> новость3
2. новость1 -> новость2
3. новость2 -> новость3
4. новость3 -> новость1
5. новость2 -> новость1

как видите, ущербно, потому что запись №1 уже итак описывает запись №4, а запись №2 описывает связь под номером 5...

можно, конечно, в news добавить поле и хранить там связи с данной новостью через какой-нибудь разделитель - но тоже не подходит, потому что в описаном выше примере при указании связи для поля1 с полем3 нужно уже два запроса (обновить информацию для поля1, указав связь на поле3 и наоборот)...


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

Кром

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

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

Crizis

Guest
Автор оригинала: Кром
Первый вариант самый правильный. Если тебе не нужны избыточные данные, не храни дублирующих друг друга связей.
в том то и дело, что тогда с проверкой при выборке (или обновлении) записи весьма сложно условие составить.

Автор оригинала: Кром
Но лучше, все таки, хранить именно в таком варианте. Дело в том, что новость номер 1 может быть связана с новостью номер 3, но не наоборот.
почему же? они вполне равноправны... предположим, пользователь редактирует связи для новости под номером три и добавляет в связь 1-ю новость, тогда получаем новость3 -> новость1, при обратной ситуации - соответственно, наоборот... хранить оба направления - избыточно, при хранении только одного (скажем, новость1 -> новость3) сложно отобразить связь новость3 -> новость1 при редактировании пользователем 3-й новости (при первой такой сложности не возникнет)... если новостей сотни, запросы получатся отвратительные... всё это не критично при единичной связи, а если их много? нужно избежать перекрестий и т.д. и т.п.
 

Кром

Новичок
Если у тебя связи равноправны, просто выкинь дублирующие значения и все. Запрос будет с лишним OR, вот и все.

select * from news_links where id = 10 or link_id = 10

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

Crizis

Guest
Автор оригинала: Кром
Если у тебя связи равноправны, просто выкинь дублирующие значения и все. Запрос будет с лишним OR, вот и все.

select * from news_links where id = 10 or link_id = 10

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

Lexx918

Guest
А я просто хочу попросить народ заценить мои наработки без БД вообще. Вот тут я начинал когда-то писать форум:
http://katkgk.h12.ru/forum/
...и шахматы:
http://katkgk.h12.ru/chess/
И хотя всё пашет на файлах (!), но всё же пашет по чуть-чуть!
Спасибо за внимание!
 

Кром

Новичок
Lexx918 для этого совершенно необязательно лезть в чужие темы. Создай свою в офтопике и там пусть оценивают твои творения. Заодно правила форума почитай.
 
Сверху