2012-05-10 41 views
0

考慮這些表:如何在現有FK的父項上添加唯一約束?

聯賽[ID,名稱]

隊[ID,姓名,leaguesid]
FK:(leaguesid) - >(leagues.id)
AK:(leaguesId)UNIQUE/團隊可以在一個聯賽/

玩家[ID,名稱]

players_teams [playersid,teamsid]
FK:(播放ersid) - > players.id,teamsid - > teams.id
AK:(playersid,teamsid)UNIQUE/球員不能在同一支球隊兩次/

這工作得很好,但我需要一個約束這將阻止同一名球員不止一次參加同一聯賽。這可以在沒有創建players_league表的情況下完成,或者可以在此表中添加leagueid?這些選項似乎會增加非規範化/管理費用,因爲我已經可以根據球隊確定任何球員所在的聯賽。

感謝

+0

你可以這樣做。首先想到的是,你是否需要處理轉讓? –

回答

1

一個不錯的(?)的方式來解決這類問題是增加一個檢查約束,可能對players_teams表的基礎上,一個用戶自定義函數,返回一個布爾值,例如。

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

或...谷歌的檢查約束UDF SQL SERV呃

+0

謝謝。這是訣竅 – jbd