В порядке ли моя ER-диаграмма для годовых данных по торговле и транспорту? - PullRequest
0 голосов
/ 13 мая 2019

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

  • Во-первых, я попытался разработать диаграмму, которая будет хранить количество пассажиров (не отдельных пассажиров), которые отправляются / выгружаются на судах в каждом порту каждой страны каждый год, и сколько там было местных и иностранных пассажиров. (Мне не нужно, чтобы эти двое взаимодействовали).

    1st diagram

    (Игнорировать Пассажиров наверху.) И сущность inwards_outwards выдаст мне таблицу в базе данных, которая будет выглядеть следующим образом:

    table of 1st diagram

  • Во-вторых, я попытался создать диаграмму таблицы, в которой я мог бы хранить данные отправителя-получателя (например, пассажиров, которые прибыли (или покинули) из страны, сколько прибыло (отправилось) друг другу страна и т. д.

    Например, в 2011 году из Англии 20 пассажиров прилетели во Францию, 10 в Германию и т. Д., А в 2011 году в Англию прибыло 23 из Франции, 19 из Германии и т. Д.

    2nd diagram

    и сущность od_hellas выдаст мне такую ​​таблицу:

    table of 2nd diagram

Вопросы:

  1. Вышеуказанное выглядит хорошо для вас?

  2. Есть ли более эффективный способ хранения годовых данных?

  3. Что я пытаюсь сделать выполнимым в контексте проекта? Какой совет вообще?

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете сделать это с тремя таблицами, как показано ниже.Если вы хотите добавить данные о пассажирах, вам понадобится четвертая таблица «Пассажир»

Значение в столбце «Числа» можно рассчитать из базовых данных с помощью SQL COUNT, например, так:

SELECT COUNT(passengerNr)
FROM Departure
WHERE portCode = "EL_OGRPIR";

Чтобы получить данные по годам, вы просто добавляете что-то вроде [И дата = "2011"] (зависит от того, как вы решили хранить данные о дате.)

Если мое решение поможет,пожалуйста, нажмите на значок голосования.

Вот логическое представление таблиц.

Here is the logical view of the tables

Вот SQL DDL, который вы использовали бы для генерации таблиц в базе данных.(например, вы можете вырезать и вставить этот SQL на панель «Новый запрос» в SQL Server Management Studio.)

CREATE SCHEMA Trade
GO

CREATE TABLE Trade.Port
(
    portCode nchar(15) NOT NULL,
    countryCode nchar(2) NOT NULL,
    portName nchar(50) NOT NULL,
    type nchar(10) CHECK (type IN (N'SeaPort', N'AirPort', N'LandBorder')) NOT NULL,
    CONSTRAINT Port_PK PRIMARY KEY(portCode)
)
GO


CREATE TABLE Trade.Departure
(
    passengerNr int NOT NULL,
    portCode nchar(15) NOT NULL,
    "date" datetime NOT NULL,
    isInternational bit,
    CONSTRAINT Departure_PK PRIMARY KEY(passengerNr, portCode)
)
GO


CREATE TABLE Trade.Arrival
(
    passengerNr int NOT NULL,
    portCode nchar(15) NOT NULL,
    "date" datetime NOT NULL,
    isInternational bit,
    CONSTRAINT Arrival_PK PRIMARY KEY(passengerNr, portCode)
)
GO


ALTER TABLE Trade.Departure ADD CONSTRAINT Departure_FK FOREIGN KEY (portCode) REFERENCES Trade.Port (portCode) ON DELETE NO ACTION ON UPDATE NO ACTION
GO


ALTER TABLE Trade.Arrival ADD CONSTRAINT Arrival_FK FOREIGN KEY (portCode) REFERENCES Trade.Port (portCode) ON DELETE NO ACTION ON UPDATE NO ACTION
GO
...