Классика баз данных - статьи

       

В качестве альтернативы можно было


  • Flight.getAirline() вызывает FlightDescription.getAirline().

  • FlightDescription.getAirline() возвращает Airline.

  • В качестве альтернативы можно было бы написать следующий SQL-запрос. (Это код расчитан на MS SQL Server и предполагает наличие очевидной схемы базы данных.) SELECT DISTINCT(FD.airlineID)
    FROM Aircraft AS Ac
    INNER JOIN Flight AS F
    ON Ac.aircraftID = F.aircraftID
    INNER JOIN FlightDescription AS FD
    ON F.flightDescriptionID = FD.flightDescriptionID
    WHERE Ac.aircraftID = theGivenAircraft
    Теперь рассмотрим влияние пересмотра модели. Модель на рис. 1 нехороша тем, что в ней не поддерживаются сквозные полеты. Авиакомпании регулярно организуют рейсы, которые начинаются в одном городе, делают остановки в одном или нескольких промежуточных городах и завершаются в городе назначения. У всей последовательности рейсов имеется единый номер рейса, но присутствуют промежуточные аэропорты, отличные от аэропортов отправления и прибытия. Для поддержки сквозных рейсов на рис. 2 добавляется ОписаниеЭтапаРейса (FlightLegDescription).

    Рис. 2. Пересмотренная модель классов UML для системы резервирования авиационных билетов с добавлением класса FlightLegDescription
    Это исправление влияет на ассоциацию между Flight и FlightDescription. Соответственно, требуется переписать метод Flight.getAirline(), чтобы он вызывал новый метод FlightLegDescription.getAirline(). Никакие другие исправления в предыдущих методах не требуются. Так что при использовании искапсуляции небольшое изменение модели классов влияет только на непосредственно воздействуемые методы. В отличие от этого, сложные запросы к СУБД затрагивают много классов, поэтому вероятность потребности их переписывания гораздо больше.

    Содержание  Назад  Вперед