2016-06-30 14 views
2

Problem: Ich versuche, einen Fremdschlüssel für eine Spalte zu einer Ansicht zu erstellen. Die Ansicht wurde als SELECT * aus einem anderen Schema mit einer Primärschlüsseleinschränkung für die von mir verwendete Spalte erstellt.Fremdschlüssel zu einer Ansicht erstellen

Ist das möglich? Wenn dies der Fall ist, wird dies als schlechte Praxis angesehen? Wenn dies nicht der Fall ist, gibt es eine Alternative? Es scheint nicht möglich zu sein durch phpmyadmin, und ich kann keinen Primärschlüssel in einer Ansicht erstellen.

Grund, warum: habe ich zwei Schemata für zwei verschiedene Anwendungen, aber es ist eine ‚Benutzer‘ Tabelle (nicht unbedingt Benutzer in der Tabelle mysql.user) in einem Schema, das Ich mag würde in dem Schema wiederverwenden, ohne Erteilen der Berechtigung für das andere Schema. Deshalb habe ich eine Ansicht verwendet.

Antwort

1

Nein. Es ist nicht möglich.

Bitte siehe MySQL Forums post.

in der referenzierten Tabelle muss ein Index sein, wo die referenzierten Spalten als die ersten Spalten aufgelistet sind ...

Ansichten sind materialisierte. Sie sind keine Tabellen mit den meisten Indizes auf ihnen. Ansichten sind auch Momentaufnahmen (Zeitpunkt der Erstellung). Sie können aus der Gunst des aktuellen Schemas fallen, unbemerkt bis sie das nächste Mal verwendet werden. Aus vielen Gründen werden sie daher keine Kandidaten für die FK-Verwendung sein, wie die target, die mit der Referenz, wie sie es nennen.

Aus dem Handbuch Seite FAQ: Views

Nach Ansicht erstellt wurde, ist es möglich, eine Tabelle oder Ansicht fallen zu lassen oder ändern, auf die die Definition bezieht. Verwenden Sie die CHECK TABLE-Anweisung, um eine Sichtdefinition für Probleme dieser Art zu überprüfen.

Ein weiterer Grund, warum eine Ansicht ein Schnappschuss ist, wie ich es nenne. Seine Gültigkeit zu jedem Zeitpunkt kann stark beeinträchtigt werden. Nicht ein FK verwiesen Kandidat.

+1

Unabhängig von pedantischen Unstimmigkeiten, dies ist die einzige Antwort auf Ihre Frage. – Drew

+0

Entschuldigung, ich hatte nicht erkannt, dass alle Ansichten in MySQL "Schnappschüsse" waren, bis weitere Untersuchungen durchgeführt wurden. Ich komme aus einem Oracle DB Hintergrund. – Mocking

0

Anstatt eine Ansicht zu verwenden, können Sie ein anderes (gemeinsames) Schema erstellen und die Tabellen dorthin verschieben. Dadurch können Sie die Tabellen wiederverwenden, ohne einzelne Tabellenberechtigungen für eingeschränkte Schemas zu gewähren. Wie @Drew sagte, ist es nicht möglich, eine Fremdschlüsseleinschränkung für eine Ansicht zu erstellen, da Sie keinen Index für eine Ansicht erstellen können.

Verwandte Themen