如何在sql server

时间:2018-04-30 10:45:43

标签: sql-server foreign-keys

我有两张桌子

---------------    --------------
| Device      |    | Connection |
---------------    --------------
| Id  PK      |    | Id PK      |
| Serial      |    | DeviceId FK|
| Model       |    | DateTime   |
---------------    --------------
  • 设备表,其中包含设备列表和一些属性
  • 连接表格表示设备连接服务器的事件(哪个设备,在什么日期和时间)。

到目前为止,这么好。 但是每个设备都有很多连接。事实证明,检索设备的最后一个连接太慢,因此决定将设备的最后一个连接的ID存储为设备表中的外键

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

现在我们有指向Device和Connection表的循环外键。 它似乎有效,但我读到这是一个糟糕的设计,所以我正在弄清楚如何解决它。

我认为使用联结表可以工作,但我不想允许多对多关系(显然每个设备最后一个连接):

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

这是个好主意吗?还有其他方法可以避免这种循环外键设计吗?

0 个答案:

没有答案