あるサイトが、人気のある記事を、その記事がリリースされたメディア形式に従って分類しているとします。そのデータベースは、次のテーブルで構成されています。
記事がデータベースから削除された場合、そのメディアの関連付けも削除する必要があります。特定の種類のメディアに関連付けられた唯一のストーリーが削除された場合、そのメディアに関する情報は役に立たなくなり、削除する必要があります。
たとえば、スパイダーマン (story_id 2) が削除された場合、映画やコミック メディアへのリンクも削除する必要があります。他のストーリーはコミックの形でリリースされないため、メディアとしてのコミックに関する情報は削除する必要がありますが、メディアとしての映画に関する情報は他のストーリーに引き続き関連しており、そのままにしておく必要があります。
抽象的には、次の方法でこれを達成することを考えました。
//delete the story itself:
DELETE FROM stories WHERE stories.story_id = 2
//delete its links to media:
DELETE FROM links WHERE links.story_id = 2
//delete any media that might subsequently no longer have any links to them:
DELETE FROM media WHERE media.medium_id does not occur in links.medium_id
またはこのように:
//delete the story itself:
DELETE FROM stories WHERE stories.story_id = 2
//fetch its associated media ids:
SELECT links.medium_id FROM links WHERE links.story_id = 2
//delete the story's links to any media:
DELETE FROM links WHERE links.story_id = 2
//consider deleting the types of media of which a story has just been deleted:
DELETE FROM media WHERE media.medium_id does not occur in links.medium_id and medium.medium_id = <previously fetched medium id(s)>
おそらくより良いアプローチの一部として、これらのクエリまたは他のクエリを実際にどのように書き出すのでしょうか?