同一表列上有多个外键?

时间:2017-03-10 21:44:14

标签: sql sql-server database

我以倍数表为例:

  • 3表:Alarm1,Alarm2,Alarm3。
  • 1表:AlarmLog
  • 1表:用户
  • 1表:TypeAlarm

警报表(id为PK身份,其他列为每个表不同)

AlarmLog表(id为PK身份,AlarmID,UserID,TypeAlarmID)

表alarm1,alarm2和alarm3的id是登录alarmLog(id,AlarmID,UserID,TypeAlarmID)

可以在AlarmLog表上添加一个外键,该外键引用多个报警表的每个alarmID吗?

问题很简单,这个TSQL工作正常,并在这种情况下返回alarm1表:

Select  * From AlarmLog
Inner join alarm1 on AlarmLog.AlarmID = alarm1.id
Inner join Users on Users.id = AlarmLog.UserID
Inner Join TypeAlarm on TypeAlarm.id = AlarmLog.TypeAlarmID

但我想删除上面的T-SQL之类的存储过程,并从实体框架中获取它。

如果你拿到外键那么简单!

1 个答案:

答案 0 :(得分:1)

不,不可能有一个列指向其他三个表。外键将创建强大的一致性检查,并且数据需要存在于三个表中。

唯一的解决方案是在Insert和Delete语句上使用触发器自动执行所需的一致性检查和级联,而无需外键。

请参阅:
https://msdn.microsoft.com/en-us/library/ms189799.aspx