2017-01-08 8 views
0

奇妙な言い回しには申し訳ありません。特定の行を削除できないデータベース関係のモデル化

削除できないデータベース行が設定されている状況があります。それらを成分と呼んでみましょう。私はレシピに属する多くの成分を持っています。しかし、これらのレシピは同じ成分を使用しています。そして、同じものを使用することによって、これらの成分が外部スクリプトによってシードされるので、同じ行を正確に使用しなければならないことを意味します。言い換えれば、これらの成分はアプリケーション自体で決して作成されることはありませんが、プリロードされています。

これは問題です。私は原料を削除せずにレシピを削除したいと思っていますが、まだ成分がそれらに属していることを望みます。

アドバイス?

+0

わかりません。原料テーブルと原料を参照するレシピテーブルがあります。食材を削除せずにレシピを削除したいとします。そしてそれはなぜ起こらなければならないのでしょうか?レシピから削除するので、削除するレシピだけであり、原料テーブルは変更されません。私は何の問題も見ません。 –

+0

"しかし、私はまだ彼らに属していることを望んでいる"彼らに?誰に? –

+0

管理者はテスト、フィルタリングなどのためにレシピを削除できるはずなので、私はまだそれらの成分を望んでいます。 – user3162553

答えて

3

私はコメントできません(十分な担当者がいない)ので、これを回答として投稿しています。私はあなたがrecipe_idとrecipe_idを格納するテーブルを作成することができます、それをRecipeToIngredientsまたはそのようなものと呼ぶと思います。次に、ingredients_idを原料テーブルのレコードに関連付け、recipe_idをレシピテーブルに関連付けることができます。まったく同じ成分列に複数のレシピをリンクさせることができます。

あなたは、この設定でそれを行うことができますので、原料を削除せずにレシピを削除したいとします。レシピを削除すると、RecipeToIngredientsテーブルからレコードを削除し、Ingredientsテーブルからレコードを削除することはできません。

あなたは「私はまだ成分がそれらに属していたいと思います」と言います。 「それら」によって、まだレシピに属していることを意味しますか?もしそうなら、私はレシピを削除せず、レシピテーブルに「アクティブ」フィールドを作成し、それを非アクティブに設定することもできます。または、レシピを削除してRecipeToIngredientsテーブルのレコードを保持することもできますが、そのテーブルには何も意味しないrecipe_id値があります。 「それら」によってあなたがレシピを意味するわけではないなら、あなたが何を意味するのかを明確にすれば、それは役に立ちます。

+0

はい、これは良い方法です:真ん中の結合テーブルを 'ON DELETE CASCADE'制約で使用する – Blag

+0

私はこれを好きです - 私はこれを試します。ありがとうございました。 – user3162553

+0

偉大な - 私はそれが行く方法を教えてください。 –

関連する問題