0

次のテーブルがあります。

create table ApartmentInfo(
     ApartmentId int primary key identity,
     ApName nvarchar(50))

create table [User](
     UserId int primary key identity,
     FirstName nvarchar(50),
     LastName    nvarchar(50),
     Username nvarchar(50),
     [Password] nvarchar(50),
     [Description] nvarchar(200))

create table ApUser(
     ApartmentId int foreign key references ApartmentInfo(ApartmentId),
     UserId int foreign key references [User](UserId),
     primary key(ApartmentId,UserId))

使用方法の要約: テーブルに 10 のアパートがあり、Apartmentinfoテーブルに 3 人のユーザーがいるとし[User]ます。

今、次のようなストアド プロシージャを書きたいと思います。

  1. everyUserIdにはすべて 10 があり、テーブルにApartmentId新しいアパートメントが作成されるたびに、すべて 3 を持つテーブルに再びApartmentInfo追加されます。ApUseruserId
  2. また、新しいユーザーがテーブルに作成された場合、それに関連するUserすべての 10 もテーブルに含まれます。ApartmentIdApUser

事前に感謝します。私は SQL Server を初めて使用するので、どうすれば実行できるかわかりませんが、可能であればお知らせください。よろしくお願いします。

4

2 に答える 2

0

アパートをユーザーに関連付けるために何をするかについての質問に答えるには、後でしたい場合...

ユーザーが表示できるアパートメントを制限している場合、それらをすべてのユーザーに個別に関連付けることはしません。しかし、彼らがアプリケーションのアパートに手動で「ウォッチ」を追加している場合は、これで問題ありません。特定のアパートのセットだけを見せたい場合は、可能であれば、それらを論理的な方法でグループ化してみてください。したがって、ApartmentGroup ルックアップ テーブルがあるかもしれません。

ApartmentGroup(ApartmentGroupId (Int), ApartmentGroupName varchar(50))

各アパートメントに ApartmentGroupId を割り当てます。次に、ApUser と ApartmentGroup の結合テーブルを作成できます。そうすれば、すべてのアパートをすべてのユーザーに関連付けることができなくなります。

ただし、それでも各ユーザーにアパートメントを追加する場合は、InsertApartment ストアド プロシージャで、それを ApUser テーブルにも挿入します。

于 2013-06-26T18:24:18.577 に答える
0

ストアド プロシージャを使用することにあまり熱心でない場合、このユース ケースはサーバー側のトリガーに非常に適しているように思われます。

IF  EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[trigger_insert_apartment]'))
DROP TRIGGER [dbo].[trigger_insert_apartment]
GO
CREATE TRIGGER trigger_insert_apartment
ON ApartmentInfo FOR INSERT 
AS INSERT ApUser(ApartmentId, UserId ) SELECT i.ApartmentId, u.UserId FROM [User] AS u, inserted AS i
GO

IF  EXISTS (SELECT * FROM sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[trigger_insert_user]'))
DROP TRIGGER [dbo].[trigger_insert_user]
GO
CREATE TRIGGER trigger_insert_user
ON [User] FOR INSERT 
AS INSERT ApUser(ApartmentId,UserId ) SELECT a.ApartmentId, i.UserId FROM ApartmentInfo AS a, inserted AS i
GO

これら 2 つのトリガーは、新しいユーザーまたはアパートメントを追加するときに、すべてのアパートメントまたはユーザーを apinfo テーブルに挿入します。

于 2013-06-23T09:52:27.720 に答える