発見したように、1 つの列を 2 つの異なるテーブルへの外部キーとして持つことはできません。同じ ID を持つグループが存在しない場合、ユーザーの属性を追加することはできません。もちろん、属性がユーザー用かグループ用かはわかりません。
コメントから、ユーザーとグループの間の am:m 関係についても言及したので、次のことをお勧めします。
create table [User]
(
UserID int identity primary key,
Name varchar(50) not null
)
go
create table [Group]
(
GroupID int identity primary key,
Name varchar(50) not null
)
go
create table UserGroup
(
UserID int not null references [User](UserID),
GroupID int not null references [Group](GroupID),
primary key (UserID, GroupID)
)
go
create table UserAttribute
(
UserAttributeID int identity primary key,
Name varchar(50) not null,
Value varchar(50) not null,
UserID int not null references [User](UserID) on delete cascade
)
go
create table GroupAttribute
(
GroupAttributeID int identity primary key,
Name varchar(50) not null,
Value varchar(50) not null,
GroupID int not null references [Group](GroupID) on delete cascade
)
注: 属性テーブルは、事前にわからない属性に対して使用する必要があります。属性になることがわかっているものはすべて、代わりに実際のテーブルのフィールドにする必要があります。顧客定義属性の属性の使用を予約します。