2016-09-21 4 views
0

SQL Serverで1..3や5..15などの非一般的な多重度を実装する方法を理解できませんでした。私は0..1、1..1、0 .. *と1 .. *を実装できます。 TRIOSテーブルにレコードを追加するには、Trioエンティティを少なくとも1つのSingerエンティティに関連付ける必要がありますが、Trioレコードは3人以上の歌手に関連付けることはできません。SQL Serverで1..3などの数値の多重度を実装する方法

お手伝いできますか?
ありがとう、 ボブ

+1

0 .. *多重度はそれほど高くありません。たとえば、 'CREATE FUNCTION fn_checkSingerCount(@i INT)のような関数を作成することでそれを行うことができます。INT INTEGER BEGIN DECLARE @out INT; SELECT @out = COUNT(*)from myTable where singerID = @i; RETURN @out; END'を実行してから、テーブルにチェック制約を追加します。たとえば、次のようにします。5..15が動作するかどうかわかりません。(例:dbo.fn_checkSingerCount(singerID)<= 3)しかし、。少なくとも5つのレコードなどを挿入する必要がありますか? – ZLK

答えて

0

このようなチェック制約を使用して、最大レコード数を管理できます。

create table trios (trio_id int, person_id int, unique clustered (trio_id, person_id)); 
go 

create function dbo.trio_check (@trio_id int) 
returns int 
as 
begin 
    declare @result int; 
    select @result = count(1) from trios where trio_id = @trio_id; 
    return @result; 
end; 
go 

alter table trios add constraint trio_check1 check (dbo.trio_check(trio_id) <=3); 
go 
関連する問題