Я недавний выпускник колледжа и новый сотрудник по разработке программного обеспечения. В последнее время все было немного медленно, поэтому мне дали задание по БД. Мои навыки работы с БД ограничены проектами с питомцами Rails и Django. Итак, я был немного удивлен своим последним заданием.
Мой менеджер попросил подкласса Person с таблицей 'Parent' и добавить ссылку на своего хранителя в таблицу Person. Это облегчает переход от Родителя к Форме, когда Хранителем, а не Родителем, является FormContact.
Вот упрощенная, фиктивная структура sql-db, с которой я работаю. Я бы нарисовал таблицы отношений, если бы у меня был доступ к Visio.
У нас есть таблица «Персона» и таблица «Форма». Существует таблица «FormContact», которая связывает Персона с Формой, не все Персоны связаны с Формой. Существует таблица отношений для отношений между людьми (работодатель, родитель и т. Д.)
Я спросил: «Почему это не может быть обработано запросом?» Реакция неэффективна. (Действительно!?!)
Итак, я спрашиваю: «Почему бы не иметь ссылку на форму? Это было бы более эффективно, поскольку вы не стали бы запрашивать таблицу FormContacts со ссылкой ребенка / опекуна». Ответ, это по существу сделало бы, что Родитель является FormContact. (Достаточно справедливо.)
Я написал запрос, чтобы перейти от родителя, не являющегося FormContact, к форме и протестировал его на рабочем сервере. Время отклика было мгновенным. SOME_VALUE - это идентификационный номер родителя.
SELECT FormID
FROM FormContact
WHERE FormContact.ContactID
IN (SELECT SourceContactID
FROM ContactRelationship
WHERE (ContactRelationship.RelatedContactID = *SOME_VALUE*)
AND (ContactRelationship.Relationship = 'Parent'));
Если я прав, «Это ненужное изменение». Что мне делать, защищать свою должность или уступать запросу менеджера?
Если я не прав. В чем моя ошибка? Есть ли лучшее решение, чем у менеджера?