Я предпочел бы второй.
Прежде всего, «предполагая, что каждое пересечение имеет ровно две дороги», весьма рискованно. В общем, при проектировании я предпочитаю не полагаться на предположения, которые столкнулись с реальностью, потому что рано или поздно ваш дизайн придется размещать для «лишних случаев».
Но второй дизайн лучше по другой причине ... если вы хотите спроектировать запрос, который возвращает все дороги, пересекающие дорогу «X» (что, я полагаю, было бы довольно распространенным требованием), ваш первый проект заставляет вас тест для дорожного «X» id как в street_id_1 , так и street_id_2 - в целом, запросы более запутаны, потому что всякий раз, когда вы ищете какую-то дорогу, вы не знаете, будет ли она указана в id_1 или id_2.
Отношение «x кресты y» должно быть симметричным (если вы не хотите различать «основные дороги» и «притоки», что, похоже, не так), поэтому вторая конструкция ближе к цели.
Что касается вашего вопроса о представлении ... как насчет:
Select a.cross_id,a.x,a.y,b.street_nm,c.street_nm
from crossing a, crossing_rel e, street b, street c
where b.street_id=e.street_id and
c.street_id=e.street_id and
a.crossing_id=e.crossing_id and
b.street <> c.street
отметить, что это не даст никакого определенного порядка, к которому улица выглядит как «х» и которая, как «у». .. может быть, вы предпочитаете что-то вроде:
Select a.cross_id,a.x,a.y,b.street_nm,c.street_nm
from crossing a, crossing_rel e, street b, street c
where b.street_id=e.street_id and
c.street_id=e.street_id and
a.crossing_id=e.crossing_id and
b.street_nm < c.street_nm
Великий, я убежден, что второй вариант является лучшим решением, мне просто нужно знать, как я могу выводить записи, как первый дизайн (см мой выбор), и как это мнение будет затронуто в соединение трех дорог – Moak
Чтобы обобщить это с 2-way на 3-way, вы можете добавить еще одно соединение для третьего идентификатора улицы, но сделайте его внешним соединением (при условии, что у вас есть как 2 пути, так и 3 пути, поэтому 3-я улица является «факультативной»). Обратите внимание: если вы хотите обобщить это на n-way, это становится слишком громоздким, чтобы управлять им как представление за N = 4 ... –