4 Stimmen

Fremdschlüssel für eine Tabelle, die nicht in der Datenbank enthalten ist, mit ORM

Ich habe eine statische Tabelle entry die von mehreren Datenbanken/Webseiten gemeinsam genutzt wird. Mit statisch meine ich, dass die Daten gelesen, aber nie von den Websites aktualisiert werden. Derzeit werden alle Websites vom selben Server bedient, aber das kann sich ändern.

Ich möchte den Bedarf an der Erstellung/Pflege dieser Tabelle für jede der Websites minimieren, also dachte ich daran, sie in eine Variable umzuwandeln, die in einer gemeinsamen Bibliothek gespeichert wird, auf die alle Websites Zugriff haben.

Das Problem ist, dass ich ein ORM verwende und Fremdschlüsselbeschränkungen verwende, um die referentielle Integrität der aus dieser statischen Tabelle verwendeten IDs zu gewährleisten, Wenn ich also diese Tabelle aus der MySQL-Datenbank in eine Variable entferne, wie kann ich dann noch die referentielle Integrität für die IDs erhalten, auf die in dieser Tabelle verwiesen wird? Muss ich das komplett programmatisch machen oder gibt es einen Trick, um die Daten trotzdem so zu behandeln, als kämen sie aus einer echten DB-Tabelle.

Meine Datenbankdefinition (mit Propel) sah ursprünglich wie folgt aus, wobei die refer Tabelle hatte ein Feld linkto die sich auf die id der entry Tisch. Nun, da die entry Tabelle im Code ist, kann ich den Fremdschlüsseltrick nicht mehr anwenden, oder kann ich irgendwie denselben Effekt erzielen?

  <table name="entry">
    <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" />
    <column name="title" type="VARCHAR" size="500" required="true" />
  </table>

  <table name="refer">
    <column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" />
    <column name="linkto" type="INTEGER"/>
     <foreign-key foreignTable="entry">
        <reference local="linkto" foreign="id" />
    </foreign-key>
  </table>

Und gibt es noch andere effiziente Methoden, um das Gleiche zu tun? Ich möchte nur nicht diese Tabelle für mehrere Websites wiederholen müssen.

1voto

tvanfosson Punkte 506878

Sie könnten eine Einschränkung erstellen - wahrscheinlich eine sehr ausführliche, wenn Ihr id FK wird durch einen Link ersetzt - aber dann wären Sie immer noch in der Lage, diese Einschränkung für jede Website aufrechtzuerhalten. Es wäre hilfreich zu wissen, wofür diese Tabellen tatsächlich verwendet werden, wenn Sie Vorschläge für andere Möglichkeiten der Handhabung haben möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X