какой дизайн лучше подходит для моделирования воздушного маршрута, пассажирского типа и типа кабины - PullRequest
2 голосов
/ 25 января 2012

У меня есть следующие объекты:

- Flight itinerary: gives an idea of what flight from destination to arrival city
- Passenger type: Adult, Child, Infant
- Cabin type: Economy, Mid-Economy, Business
- Price: price is based on the combination of Passenger type and Cabin type

У меня есть два варианта для моделирования этого.Предполагая, что таблица содержит информацию о маршруте полета и дает flightId для этого рейса.

Случай A :

Цена Таблица:

flightId    |   PassengerType   |   CabinType   |   Price

Дело B :

FlightPassenger Таблица

flightPassId    |   flightId    |   PassengerType

PassengerCabin таблица

flightPassCabinId   |   flightPassId    |   CabinType

Цена таблица

flightPassCabinId   |   Price

Подход B позволяет мне добавлять больше объектов в будущем, и тогда таблица цен может легкофактор в этих сущностях.

Я разделен между этими двумя подходами.С кем мне бежать?Каковы плюсы и минусы любого из них?

1 Ответ

1 голос
/ 08 февраля 2012

Прежде чем ответить, я бы хотел договориться о встрече: цена полета зависит только от типа пассажира и типа салона? расстояния между пунктами назначения не имеют значения?

Если вы используете базовые нормальные формы, у вас должны быть следующие таблицы (с некоторыми полями только для примера). У этой модели цена будет в таблице «Рейс», в которой планируется хранить значения для кабины, рейса и типа пассажира. Таким образом, один рейс будет иметь девять записей для (Взрослый, ребенок, младенец) x (экономика, средний бизнес, бизнес). Другим способом, который потребляет меньше строк для каждого рейса, является сохранение модификаторов для типов пассажиров. Например: щит платит 50% от цены и т. Д., Но вот код:

   CREATE TABLE `passenger` (
      `pss_id` bigint(20) NOT NULL,
      `pss_name` varchar(255) NOT NULL,
      `pss_type` bigint(20) NOT NULL,
      PRIMARY KEY (`pss_id`),
      CONSTRAINT `fk_idtypepass` FOREIGN KEY (`pss_type`) 
      REFERENCES `pass_type` (`pst_id`)
      ON DELETE NO ACTION ON UPDATE CASCADE
    )

    CREATE TABLE `pass_type` (
    `pst_id` bigint(20) NOT NULL,
    `psd_description` varchar(255) NOT NULL,
    PRIMARY KEY (`pst_id`))

    CREATE TABLE `destination` (
    `dst_id` bigint(20) NOT NULL,
    `dst_name` varchar(255) NOT NULL,
    PRIMARY KEY (`dst_id`))

    CREATE TABLE `cabin` (
    `cbn_id` bigint(20) NOT NULL,
    `cbn_name` varchar(255) NOT NULL,
    PRIMARY KEY (`cbn_id`))

    CREATE TABLE `flight` (
    `fli_id` bigint(20) NOT NULL,
    `fli_from` bigint(20) NOT NULL,
    `fli_to` bigint(20) NOT NULL,
    `fli_cabin` bigint(20) NOT NULL,
    `fli_psstype` bigint(20) NOT NULL,
    `fli_price` double NOT NULL,
    PRIMARY KEY (`fli_id`),
    CONSTRAINT `fkn_from` FOREIGN KEY (`fli_from`) REFERENCES `destination` (`dst_id`) ON UPDATE CASCADE ON DELETE NO ACTION,
    CONSTRAINT `fkn_to` FOREIGN KEY (`fli_to`) REFERENCES `destination` (`dst_id`) ON UPDATE CASCADE ON DELETE NO ACTION,
    CONSTRAINT `fkn_cabin` FOREIGN KEY (`fli_cabin`) REFERENCES `cabin` (`cbn_id`) ON UPDATE CASCADE ON DELETE NO ACTION,
    CONSTRAINT `fkn_psstype` FOREIGN KEY (`fli_psstype`) REFERENCES `pass_type` (`pst_id`) ON UPDATE CASCADE ON DELETE NO ACTION)

    CREATE TABLE `flight_x_passenger` (
    `fxp_id` bigint(20) NOT NULL,
    `fxp_flight` bigint(20) NOT NULL,
    `fxp_passenger` bigint(20) NOT NULL,
    PRIMARY KEY (`fxp_id`),
    CONSTRAINT `fk_flight` FOREIGN KEY (`fxp_flight`) REFERENCES `flight` (`fli_id`) ON UPDATE CASCADE ON DELETE NO ACTION,
    CONSTRAINT `fk_passenger` FOREIGN KEY (`fxp_passenger`) REFERENCES `passenger` (`pss_id`) ON UPDATE CASCADE ON DELETE NO ACTION
)

Любые вопросы, пожалуйста, свяжитесь со мной. С уважением.

...