3 つのテーブルがある場合:
music_genres
-----------
music_type_id
genres
[other unique fields]
minerals
--------
mineral_id
mineral
[other unique fields]
verbs
-----
verb_id
verbs
[other unique fields]
これらには次の情報が入力されています。
rock
jazz
funk
punk
rock
boulder
stone
shale
rock
wobble
shake
vibrate
ここで、これらの項目ごとに個別のテンプレートを使用して Web ページを表示し、この情報を次の表に格納したとします。
pages
-----
page_id
page_url
template_url
foreign_key_id
次のようなデータを使用します。
/page/music-genres/rock/
/music-genres-template.html
1
/page/verbs/rock/
/verb-template.html
1
/page/minerals/rock/
/mineral-template.html
1
/page/minerals/rock/images/
/mineral-images-template.html
1
テンプレートは、外部キーが特定の関連テーブルに関連していることを認識しているため、鉱物テンプレートは、そのテーブルの他のフィールドについて鉱物テーブルにクエリを実行することを認識しています。ただし、参照整合性はありません。鉱物テーブルからロックが削除された場合、カスケード削除を使用してページから行を削除することはできません。外部キーは一意ではないためです。これをエレガントに回避する方法はたくさん考えられます。
- トリガーによるカスケード削除のエミュレート
- music_types、minerals、verbs テーブルの各行に項目タイプを格納し、これを追加の外部キーとして使用する
- 適切なテーブル名をページ テーブルに格納する
- PHPなどでデータベースの整合性を維持しています。
データを保存するか、データベースの整合性を維持するためのより良い方法があるに違いないと考えています。何かご意見は?