Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Кросслист  [new]
viktor zelenin
Member

Откуда:
Сообщений: 185
А подскажите пожалуйста, как лучше хранить крослист какой-то записи, чтобы потом можно было потом извлекать без проблем.
Есть таблица:
1 Запись
2 Чтение
3 Запись
4 Чтение
5 Чтение

записи под номером 1 относятся записи 4-ая и 5, это я отражаю в таблице перекрестности:
(номер записи1, номер записи2)
1 4
1 5

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

или есть способ как-то иначе получать результаты кроса? т.е. как хранить лучше?
11 июн 09, 00:18    [7288098]     Ответить | Цитировать Сообщить модератору
 Re: Кросслист  [new]
Жмурик
Member

Откуда: Оттуда
Сообщений: 382
Давай я сначала отвечу не на твой вопрос а сам тебе задам ? : )))))))
Просто мне показалось из твоего примера, что все немного проще и "таблица перекрестности" не нужна.
Я заметил, что на одну запись у тебя идет несколько чтений. Поэтому достаточно вместо новой таблицы связей завести одно поле - ссылку на Запись
Содержание таблицы в твоем случае станет таким:

1 Запись null
2 Чтение null
3 Запись null
4 Чтение 1
5 Чтение 5
И никакого кросса : )

Теперь если мы назовем таблицу Log, а поля ID, RW, W_ID, то запрос будут выглядеть например так

select LW.ID [Запись], LR.ID [Чтение]
from Log LR
join Log LW on LW.ID = LR.W_ID
where LR.ID = 4
order by 1, 2
11 июн 09, 01:49    [7288162]     Ответить | Цитировать Сообщить модератору
 Re: Кросслист  [new]
Жмурик
Member

Откуда: Оттуда
Сообщений: 382
очепятка:

1 Запись null
2 Чтение null
3 Запись null
4 Чтение 1
5 Чтение 1
11 июн 09, 02:00    [7288169]     Ответить | Цитировать Сообщить модератору
 Re: Кросслист  [new]
viktor zelenin
Member

Откуда:
Сообщений: 185
Жмурик, спасибо за предложенный вариант, начал пробовать, и понял, что видимо не всё так гладко.
Например, есть таблица со списком моделей аккумуляторов разных производителей:

У меня есть такие записи:
tblsubjects(id, name)
1 YTZ7
2 FTZ7 (YTZ7, YTZ7-1)
3 ETX1 (YTX1)
4 ETX8 (YTX8)
5 YTZ7-1
6 ETZ7 (YTZ7, YTZ7-1)
7 YTX1
8 YTX8

модель товара и в скобках перечислены кроссы. так вот как их связать, чтобы при выборе YTZ7, я получал FTZ7, YTZ7-1, ETZ7?
А, при выборе ETZ7 можно было бы получить YTZ7, FTZ7, YTZ7-1.
Я дотумкал пока до того, что таблица с кросами всё равно нужна, а хранить так:
tblcross(id, groupid, subject)
1 1 YTZ7 
2 1 YTZ7-1
3 1 FTZ7
4 1 ETZ7
11 июн 09, 09:11    [7288353]     Ответить | Цитировать Сообщить модератору
 Re: Кросслист  [new]
Жмурик
Member

Откуда: Оттуда
Сообщений: 382
У меня такое ощущение что у тебя нет самой постановки задачи.
На первый взгляд похоже, что при выборе объекта должны выводиться связанные с ним и связанные со связанными.
Ты бы уточнил семантику связи, т.е. связаны - это значит ...?

И еще, ты графически хотя бы для себя можешь представить ожидаемую структуру?
Что это, дерево? Граф? Циклический?

Может тебе надо по произвольному объекту вытащить весь связный подграф, содержащий объект.
Скажи какие нибудь буквы, а то нет информации даже для интуиции : )
18 июн 09, 18:50    [7317488]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить