ERD для двух мест - PullRequest
       1

ERD для двух мест

0 голосов
/ 11 сентября 2010

Я создаю базу данных и застрял с этой проблемой:

Мой случай заключается в разработке ERD для отслеживания автомобилей и их перемещений от места к месту.

Пользователи используют форму, которая содержит три поля: Первое используется для ввода автомобиля #. Второе поле используется для ввода местоположения, откуда приехал автомобиль (From_Location) и третье поле для ввода местоположения, в которое едет машина (To_Location).

Например, Автомобиль № 1 перемещается из местоположения # A в местоположение # B. Другой пример, машина № 2 движется из местоположения # B в Местоположение # A.

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

Отношение должно быть много ко многим.

Надеюсь, проблема достаточно ясна.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2010

У меня будет три таблицы

  • Автомобиль
  • Местоположение
  • CarLocation

Автомобиль будет иметь соответствующую информацию об автомобиле

  • CarId
  • Имя
  • Цвет
  • Год
  • Марка
  • Модель

Местоположение будет только одним полем, если вы не хотите добавлять широту / долготу и т.д. ...

  • LocationId
  • LocationName
  • Широта
  • Долгота

CarLocation будет включать как минимум четыре поля

  • CarLocationId
  • CarId
  • FromLocationId
  • ToLocationId

Я бы, вероятно, включил поле UpdateTimestamp в таблицу CarLocation.

0 голосов
/ 11 сентября 2010

Соотношение между автомобилем и местоположением таково: для каждого автомобиля есть ровно два местоположения (от и до), а для каждого местоположения - 0..n автомобилей.
Вы должны: составить таблицу автомобилей с полями: LocationFromи LocationTo каждый внешний ключ к таблице место, которое имеет LocationId и LocationName (вы можете иметь только тот, что спорно)
Почему вам не нужно третью таблицу: соединение не многие ко многим - это два.ко многим.
Когда вы имеете истинное отношение ко многим ко многим, таблицы не могут определить, какая запись в одной записи соответствует какой записи в другой, и, следовательно, необходимость в третьей таблице (попробуйте ... например, еслиВы должны были сохранить все местоположения каждого автомобиля - это было бы отношением многих ко многим, потому что теперь автомобиль связан с 0..n местоположениями, а местоположение связано с 0..n автомобилями. Теперь, как бы вы былив состоянии сказать, какая запись автомобиля связана с каким местоположением (у вас может быть n столбцов для этого, но это неразумно, поэтому вам нужна другая таблица)) anyhoЗдесь у вас есть только две колонки в машине, которые связаны с местоположением «напрямую».

Добавлено:
Так что вам также нужна история ... В этом случае вам действительно нужна дополнительная таблица.
Я бы добавил столбец в свой оригиналрешение, так что теперь таблица car имеет столбцы:
Id, FromLocation, ToLocation, LocationHistoryId
FromLocation и ToLocation остается прежним, LocationHistoryId - это внешний ключ таблицы LocationHistory, который имеет следующие столбцы:
CarId, LocationId
Где ключ является составным ключом, который включает оба поля (и, очевидно, LocationId указывает на таблицу Location)

...