Frage

Wenn ich drei Tabellen:

music_genres
-----------
music_type_id
genres
[other unique fields]

minerals
--------
mineral_id
mineral
[other unique fields]

verbs
-----
verb_id
verbs
[other unique fields]

und diese sind bevölkert mit:

rock
jazz
funk
punk

rock
boulder
stone
shale

rock
wobble
shake
vibrate

Lassen Sie uns jetzt sagen, dass ich für jedes dieser Elemente eine Webseite anzeigte, die jeweils eine eigene Vorlage verwenden und diese Informationen in der folgenden Tabelle gespeichert:

pages
-----
page_id
page_url
template_url
foreign_key_id

mit Daten wie zum Beispiel:

/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

Die Vorlagen werden wissen, dass die ein Fremdschlüssel auf die spezifische Bezugstabelle bezieht sich, so dass die Mineral Vorlage mit Know die Mineralien Tisch für die Tabelle andere Felder abfragen. Aber ich habe keine referentielle Integrität. Wenn Gestein aus dem Mineral Tabelle gelöscht wird, kann ich nicht verwenden Cascading Reihen von Seiten zu entfernen, löscht, als Fremdschlüssel nicht eindeutig ist. Ich kann mich zahlreiche Möglichkeiten, um diese unelegant zu bekommen:

  • emulieren Cascading löscht mit Auslöser
  • Speichern der Elementtyp in Jede Zeile der music_types, Mineralien und Verben Tabellen, und mit dieser eine eines zusätzliche Fremdschlüssel
  • Speichern des entsprechenden Tabellennamen in den Seiten Tabelle
  • Die Aufrechterhaltung der Integrität der die Datenbank mit PHP etc.

Ich denke, dass es ein besserer Weg, entweder meine Daten zu speichern oder um die Integrität der Datenbank zu halten. Irgendwelche Gedanken?

War es hilfreich?

Lösung

Ich denke, dass Ihr Problem liegt hier

  

Die Vorlagen werden wissen, dass das eine   Fremdschlüssel bezieht sich auf die spezifischen   verknüpften Tabelle,

Das ist Wissen, das nicht überall in der Datenbank gespeichert ist.

Ich sehe zwei Möglichkeiten, aus ihm heraus:

  1. Da Sie tatsächlich getrennte Tabellen für jede Art von ‚Ding‘ erstellen, sollten Sie eine differente Spalte für jede Art der Sache haben die entsprechende Tabelle in der Seiten-Tabelle verweisen, um alle Spalten null bis auf eine Einstellung ( dies könnte über eine Einschränkung)

  2. erzwungen werden
  3. Haben Sie einen ‚Master Dinge‘ Tisch mit einer eindeutigen ID, die dann Seiten verweisen könnten, die beide eine Spalte mit dem Typ und eine Spalte zeigt auf den Rest der eindeutigen Daten zu identifizieren, die in einem gespeicherten würden andere Tabelle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top