0

次の表を検討してください。

リーグ [id,name]

team [ id,name,leaguesid]
FK: (leaguesid) -> (leagues.id)
AK: (leaguesId) UNIQUE /チームは 1 つのリーグに所属できる/

プレイヤー [id,name]

player_teams [playersid,teamsid]
FK: (playersid) ->players.id, teamid -> teams.id
AK: (playersid,teamsid) UNIQUE /プレイヤーは同じチームに 2 回所属することはできません/

これはかなりうまく機能しますが、同じプレイヤーが同じリーグに複数回参加することを防ぐ制約が必要です。これは、players_league テーブルを作成したり、リーグ ID をこのテーブルに追加したりせずに実行できますか? これらのオプションは、チームに基づいてプレーヤーが所属しているリーグをすでに判断できるため、非正規化/オーバーヘッドを追加しているようです。

ありがとう

4

1 に答える 1

1

この種の問題を解決する 1 つの良い (?) 方法は、たとえば、bool 値を返すユーザー定義関数に基づいて、おそらく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-日付-windows.aspx

またはここ

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

または...チェック制約UDF SQLサーバーのGoogle

于 2012-05-10T23:38:53.483 に答える