1

QuesTypeとQuesの2つのテーブルがあるとしましょう:-

QuesType

QuestypeID|QuesType      |Active
------------------------------------
101       |QuesType1     |True
102       |QuesType2     |True
103       |XXInActiveXX  |False



Ques

QuesID|Ques|Answer|QUesTypeID|Active
------------------------------------
1     |Ques1|Ans1 |101     |True
2     |Ques2|Ans2 |102     |True
3     |Ques3|Ans3 |101     |True

QuesTypeテーブルの場合:-QuesTypeIDは主キーです

Quesテーブルの場合:-QuesIDは主キーであり、QuesType IDは、QuesTypeテーブルからQuesTypeIDを参照する外部キーです。

QuesTypeテーブルからレコードを削除できなくなりました。Active=Falseを設定することによってのみQuesTypeを非アクティブにすることができます。Ques Tableとの外部キー関係のため、QuesTypesを完全に削除できません。したがって、列Active = falseを設定しただけで、それらのQuestypeは、バインドされたときにグリッドに表示されません。

私がやりたいのは、QuesTypeを完全に削除できるようにすることです。これで、Quesテーブルのどこにも使用されていない場合にのみ削除できますよね?

したがって、QuesTypeを完全に削除するには、これが私にできることだと思いました。-

QuesTypesを表示するグリッドには、アクティブ用のこのチェックボックスと削除用のボタンがあります。ユーザーがいくつかのQuesTypeを非アクティブにすると、OnCheckChanged()イベントが実行され、すべての質問を削除するコードが含まれると思いました。そのQuesTypeIDを使用しているQuesテーブル内。次に、QuesTypeグリッド上で、そのQuesTypeは非アクティブとして表示され、ユーザーはそれを完全に削除できます。

私は正しく考えていますか?

現在、DeleteQuesTypeストアドプロシージャで行っていることは次のとおりです。-

Active=falseの設定とQuesTye=の設定XXInactiveXXのような文字列

他に方法はありますか?

編集最初にユーザーにQuesTypeを非アクティブ化させ、非アクティブ化された場合にのみユーザーが完全に削除できるようにするなど、その方法でのみ実装したい場合はどうすればよいですか。それは正しい論理ですか?

4

2 に答える 2

2

私はあなたがする必要があるのは置くことだと思います

ON DELETE CASCADE

外部キー制約に関する句。これにより、対応するQuesType行が削除されると、Quesテーブルから行が自動的に削除されます。

于 2011-01-05T19:54:34.543 に答える
1

非アクティブ化されたもののみを削除できますQuesTypes

を削除する前にQuesType、データベースにクエリを実行して、かどうかを確認する必要がありますQuesType.Active = false。はいの場合、それを参照する子テーブルからすべての行を削除できますQuesType.Id(これはカスケード削除と呼ばれます)。子行のQuesTypeID列にnull値を設定することもできます。

この本をオンラインで読んで、ONDELETECASCADEについて学びましょう。SETNULL句。この句を使用すると、必要なことを実行できます。

于 2011-01-05T19:57:02.990 に答える