如何在现有FK的父级上添加唯一约束?

时间:2012-05-10 23:26:54

标签: sql-server foreign-keys constraints

考虑这些表:

联赛[id,name]

球队[id,name,leaguesid]    
FK :( leaguesid) - > (leagues.id)    
AK :( leaguesId)UNIQUE / 团队可以在一个联盟中 /

球员[身份证,姓名]

players_teams [playersid,teamsid]
FK :(球员) - > players.id,teamsid - > teams.id
AK:(playerid,teamsid)UNIQUE / 球员不能两次在同一支球队 /

这很有效,但是我需要一个约束来防止同一个玩家不止一次进入同一个联盟。这可以在不创建player_league表或在此表中添加leagueid的情况下完成吗?这些选项似乎会增加非规范化/开销,因为我已经可以根据他们的团队确定玩家所在的任何联赛。

感谢

1 个答案:

答案 0 :(得分:1)

解决此类问题的一种不错的(?)方法是根据用户定义的函数添加一个检查约束,可能在players_teams表上,例如返回一个bool值。

msdn

http://msdn.microsoft.com/en-US/library/ms188258%28v=sql.105%29.aspx

或者

http://sqlblogcasts.com/blogs/tonyrogerson/archive/2008/02/07/using-a-udf-in-a-check-constraint-to-check-validity-of-history-windows-start-end-date-windows.aspx

或在这里

http://connectsql.blogspot.com/2011/01/sql-server-function-based-check.html

或... google for check constraint udf sql server