У меня есть две таблицы
--------------- --------------
| 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 |
--------------- --------------
Это хорошая идея? Существуют ли другие способы избежать этого кругового внешнего ключа?