реструктуризация / разбиение таблицы базы данных - PullRequest
0 голосов
/ 05 августа 2011

У меня есть таблица, которая имеет следующую структуру, столбцы: источник, пункт назначения, время в пути и время отправления.Первичный ключ представляет собой совокупность времени отправления, назначения и времени отправления.Есть ли способ реструктурировать это так, чтобы в строках не было слишком много дублирования отправителя и получателя?

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Наличие «слишком большого количества дубликатов [отправителей и пунктов назначения» не имеет значения.Это только часть вашего уникального ключа, и это необходимо.Если вы действительно хотите, вы можете создать отдельную таблицу, например, такую:

OriginDestinationKey
Origin
Destination

И тогда в исходной таблице ваш PK будет

OriginDestinationKey
DepartureTime

Но вы все равно простособирается иметь кучу дубликатов OriginDestinationKeys.Я бы не волновался об этом, пока структура / определение имеет логический смысл, наличие этих дубликатов не так уж и сложно.Если вы хотите отделить его, чтобы было легче составлять отчеты и т. Д., То смело выделяйте их.

1 голос
/ 05 августа 2011

Для этого может потребоваться создать 3 таблицы:

Расположение таблиц
location_id PK
location_name_short
location_name_long

пример:
1, Нью-Йорк, Нью-Йорк
2, ЛС, Бостон

Итак, первая таблица имеет все возможные источники и пункты назначения

Таблица travelPath
travel_path_id PK
исходная таблица FK локаций
конечная таблица FK локаций

пример:
1, 1, 2 (от NYC до BOS)
2,2, 1 (от BOS до NYC)

Таким образом, во второй таблице есть все возможные пары FROM - TO

Время вылета таблицы
tavel_path_id FK таблицы travelPath
время отправления

Пример:
1, 10:00
1, 5:00
2, 12:00
2, 6:00

Итак, третийтаблица может иметь все время отправления.

0 голосов
/ 05 августа 2011

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

Ваш текущий логический ключ должен включать время отправления, чтобы обеспечить уникальность для ограничения первичного ключа (или уникального индекса).

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