как избежать циклических внешних ключей в сервере SQL - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть две таблицы

---------------    --------------
| Device      |    | Connection |
---------------    --------------
| Id  PK      |    | Id PK      |
| Serial      |    | DeviceId FK|
| Model       |    | DateTime   |
---------------    --------------
  • a device таблица, содержащая список устройств и несколько свойств
  • a connection Таблица, представляющая событие подключения устройства к серверу (какое устройство, в какую дату и время).

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

---------------    -------------
| Device      |    | Connection |
---------------    --------------
| Id  PK      |    | Id PK      |
| Serial      |    | DeviceId FK|
| Model       |    | DateTime   |
| LastConId FK|    --------------  
---------------    

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

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

---------------    ---------------    --------------
| Device      |    |LastDeviceCon|    | Connection |
---------------    ---------------    --------------
| Id  PK      |    | DeviceId  FK|    | Id PK      |
| Serial      |    | ConId     FK|    | DeviceId FK|
| Model       |    ---------------    | DateTime   |
---------------                       --------------

Это хорошая идея? Существуют ли другие способы избежать этого кругового внешнего ключа?

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