Рассмотрим SQL Server 2005 базу данных с кучей данных о множестве людей, большая часть которых замужем . Для отслеживания отношений между людьми существует таблица Отношения , которая служит для связи идентификатора одного человека с идентификатором другого. A Тип отношений в каждой записи Отношения служит для обозначения типа отношений, существующих между двумя людьми, о которых идет речь (дух): "женат", "является сыном", "является дочерью" и т. Д. .
Для женатых людей в таблице есть ДВА записи о взаимоотношениях: одна показывает, что Лицо-А состоит в браке с Лицом-В, а другая - о том, что Лицо-В состоит в браке с Лицом-А. В случае брака было бы ошибкой не иметь обе записи, хотя в БД есть несколько записей без взаимности. (Это унаследованный дизайн, и у меня нет свободы менять этот подход.)
RelID Person1 Person2 RelationshipType
-----------------------------------------
1 1001 1010 Married //Reciprocated by RelID 4
2 1002 1011 Married //Reciprocated by RelID 5
3 1003 1012 Married //Reciprocated by RelID 6
4 1010 1001 Married //Reciprocated by RelID 1
5 1011 1002 Married //Reciprocated by RelID 2
6 1012 1003 Married //Reciprocated by RelID 3
7 1004 1013 Married //Not properly reciprocated
Что мне нужно сделать, так это извлечь из таблицы уникальных супружеских пар.
Я создал функцию с именем GetOrderedPair (val1, val2) , которая принимает 2 идентификатора человека и возвращает разделенное запятыми строковое значение обоих значений в последовательном порядке. Таким образом, он всегда возвращает одно и то же строковое значение независимо от того, получаю ли я, ссылаясь на приведенный выше пример данных, Person1 и Person2 из записи с RelID 1 или RelID 4 (возвратно-поступательная пара записей).
Я не могу не думать, что есть лучший способ ускользнуть от меня. Является ли использование этой функции лучшим подходом? Что еще можно порекомендовать?
Спасибо, конечно, заранее. : -)