структура базы данных, уникальные сочетания

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

подскажите как лучше хранить список портов для круиза, они должны быть в заданном порядке, пока остановился на хранении их в виде строки и добавление новых круизов администратором, так как не придумал ничего более подходящего. проект учебный, пишу на java сервлетах

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

CREATE TABLE cruise(
    id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ship_id INT REFERENCES ship(id) ON DELETE SET NULL,
    departure_port_id INT NOT NULL REFERENCES port(id),
    date_of_departure DATE NOT NULL,
    arrival_port_id INT NOT NULL REFERENCES port(id),
    date_of_arrival DATE NOT NULL,
    route VARCHAR(120) NOT NULL
);

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Space Researcher

Для того чтобы спроектировать нормальную бд почитайте о том как это делается и обратите большое внимание на нормализацию. Когда я говорю нормальная бд - я имею в виду базу данных без дублирования данных, которая соответсвует в здравом смысле модели, учёт данных которой мы и ведём. Уверяю вас, если вы нормализуете свою бд, хотя бы до 3 нормальной формы, то у вас сразу получится то, что будет вызывать у вас приятные эмоции.

→ Ссылка