探しているのは1対多のテーブルですが、ツイストは、ブラックリストに載っているユーザーの詳細を取得するために、元のテーブルへの参照を持っていることです。したがって、ユーザーテーブルは次のようになり、AppUserIDがユーザーを一意に識別するPKになります。
CREATE TABLE [dbo].[AppUser](
[AppUserID] [bigint] IDENTITY(1,1) NOT NULL, -- Pk for the user
[UserName] [nvarchar](50) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[EmailAddress] [nvarchar](255) NULL,
CONSTRAINT [PK_APP_USER] PRIMARY KEY CLUSTERED ( [AppUserID] ASC)
)
GO
ブラックリストテーブルには、特定のAppUserIdのブラックリストに登録されたユーザーが0,1、n..含まれます。AppUserBlacklistIDは、現在のユーザーの特定のブラックリストに登録されたユーザーを一意に参照するために必要です。それらを削除または更新する必要がある場合に備えて。したがって、AppUserBlackListIdを使用します
CREATE TABLE [dbo].[AppUserBlackList](
[AppUserBlackListID] [bigint] IDENTITY(1,1) NOT NULL,
[AppUserID] [bigint] NOT NULL, -- Foreign Key to the AppUser table to identify the users black listed 'Users'
[BlackListedAppUserID] [bigint] NOT NULL, -- Foreign Key to the AppUser table to identify the user that is black listed
[Reason] [nvarchar](255) NOT NULL,
CONSTRAINT [PK_APP_ROLE] PRIMARY KEY CLUSTERED (AppUserBlackListID ASC)
) ON [PRIMARY]
次に、いくつかの外部キー制約を作成します
-- Foreign key to the users table. This is used to list all the black listed users for a particular user
ALTER TABLE [dbo].[AppUserBlackList] WITH CHECK ADD CONSTRAINT [FK_AppUserBlackList.AppUserID_AppUser] FOREIGN KEY([AppUserID])
REFERENCES [dbo].[AppUser] ([AppUserID])
-- This is a Foreign Key to the App user for the user that is black listed. It should also be unique in that one user can only blacklist another
-- User one time.
ALTER TABLE [dbo].[AppUserBlackList] WITH CHECK
ADD CONSTRAINT [FK_AppUserBlackList.BlackListedAppUserID_AppUser] FOREIGN KEY([BlackListedAppUserID])
REFERENCES [dbo].[AppUser] ([AppUserID])
これで、設計を非常に厳しくするために、ユーザーが人を2回以上ブラックリストに登録できないこと、およびユーザーが自分自身をブラックリストに登録できないことを示すために、固有の制約を設定できます。
特定のユーザーのすべてのブラックリストに登録されたユーザーを取得するには..2つのテーブルを結合します
Select AppUserBlackListID, AppUserID,BlackListedUserName
from
AppUser auCurrentUser
Inner join AppUserBlackList auBl
on auCurrentUser.AppUserId = auBl.AppuserID
Inner join AppUser auBlackListedUserDetails
on auBL.BlackListedAppUserID =auBlackListedUserDetails.AppUserID
Where au.AppUserId = 10
したがって、ブラックリストに登録されたユーザーの詳細を取得するには、ユーザーテーブルに再度参加する必要があります
お役に立てれば