1

これが私が問題を抱えている3つのテーブルです:

  • 表:機会-さまざまな機会(職務)の説明を保持します

  • 表:Opportunities_Applicants-機会を申請するさまざまな申請者を保持します。1人の応募者は1つの機会にしか応募できませんが、1つの機会には多くの応募者がいる可能性があります

  • テーブル:Opportunities_Category-カテゴリ名とタイプを保持します。1カテゴリは多くの機会に関連する可能性があります。

オポチュニティカテゴリが削除されたときにカスケード削除を実行しようとしています。これにより、対応するオポチュニティとそれらのオポチュニティの申請者が削除されます。

この構造は適切ですか、それともデータベースを別の方法で設定する必要がありますか?オポチュニティカテゴリが削除されたときにCASCADINGDeleteが機能するようにするには、テーブルの関係をどのように設定する必要がありますか?

CASCADING Deleteを使用する必要がありますか?

create table Opportunities_Category
(   
CategoryID          int identity(1,1)       not null
    constraint PK_CategoryID primary key clustered,         
[Name]              varchar(150)            not null,
[Type]              varchar(100)            not null --Pay, Volunteer, Volunteer Yearly
)

create table Opportunities
(
OpportunityID       int identity(1,1)   not null
    constraint PK_OpportunityID primary key clustered,
CategoryID          int                     not null
    constraint FK_CategoryID foreign key references Opportunities_Category(CategoryID) ON DELETE CASCADE,       
Title               varchar(300)            not null,
PostingDate         datetime                not null,
ClosingDate         datetime                not null,
Duration            varchar(150)            not null, --Part Time, Full Time, Seasonal, Contract
Compensation        varchar(150)            not null, --Hourly, Volunteer, Salary
[Description]       varchar(5000)           not null,
Qualifications      varchar(5000)           not null,
Show                int                     not null
)

create table Opportunities_Applicant
(
ApplicantID             int identity(1,1)   not null
    constraint PK_ApplicantID primary key clustered,
OpportunityID           int                 not null
    constraint FK_OpportunityID foreign key references Opportunities(OpportunityID) ON DELETE CASCADE,
[First]                 varchar(150)        not null,
[Last]                  varchar(150)        not null,
Phone                   varchar(20)         not null,
Cell                    varchar(20)         not null,
EMail                   varchar(200)        not null,
CoverLetterResume       varchar(300)        null,
[Timestamp]             datetime            not null    
)   
4

2 に答える 2

1

私のテーブルは正しく設定されていることがわかりました。

昨日、私はやろうとしていました:DELETE FROM Opportunities WHERE CategoryID=@CategoryID。これは、OpportunitiesとOpportunities_Applicantsからレコードを削除するだけでした。

今日、私は次のように変更しました:DELETE FROM Opportunities_Categoies WHERE CategoryID = @CategoryIDそして3つのテーブルすべてが対応するレコードを削除しています!

于 2011-04-20T16:35:49.910 に答える
0

ALTERTABLE[dbo]。[Opportunities]WITHCHECK ADD CONSTRAINT [FK_OpportunitiesCategory_Opportunities] FOREIGN KEY([CategoryID])REFERENCES [dbo]。[Opportunities_Category]([CategoryID])ON DELETE CASCADE GO

幸運を...

于 2011-04-19T22:13:41.753 に答える