Benötigt eine Ansicht ihre eigenen Fremdschlüsseleinschränkungen?

10

Haftungsausschluss: Ich bin ein Programmierer, kein DBA, also nimm es mit ...

Ich habe eine Ansicht, mit der ich nur zwei Objekte zusammen ordne. Ich muss einen Join zwischen ein paar verschiedenen Tabellen machen, um das zu bekommen:

CREATE OR REPLACE VIEW V_SCREENING_GROUP_SITES AS (
SELECT SG.SCREENING_GROUP_ID, V.SITE_ID
FROM SCREENING_GROUP SG, VISIT V, VISIT_DATE VD
WHERE VD.VISIT_ID = V.VISIT_ID 
AND V.SCREENING_GROUP_ID = SG.SCREENING_GROUP_ID);

Oben ist nur für den Kontext, mach dir darüber keine Sorgen. Ich muss wissen, wie sich die Felder in meiner neuen Ansicht V_SCREENING_GROUP_SITES (SCREENING_GROUP_ID und SITE_ID) als Fremdschlüssel für die Tabellen SCREENING_GROUP und SITE verhalten. Oder spielt es überhaupt eine Rolle?

Wenn es ein Tisch wäre, würde ich tun:

ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...

Aber da es eine Ansicht ist, die offensichtlich nicht funktioniert. Ich konnte keine ALTER VIEW-Syntax finden, die zum Festlegen von FKs funktioniert. Was sollte ich tun?

(Dies ist eine MySQL-Datenbank)

Troy
quelle

Antworten:

12

Eine Ansicht ist eine logische Tabelle, die auf einer oder mehreren physischen Tabellen basiert. Wenn die zugrunde liegenden Tabellen Fremdschlüsselbeziehungen enthalten, werden diese in der Ansicht angezeigt. Ansichten hängen vollständig von den Tabellen ab, aus denen sie abgeleitet sind. Daher ist es nicht möglich, ihnen Fremdschlüssel hinzuzufügen.

gview
quelle
1
Großartig, also muss ich dann nichts tun (FK-Einschränkungen sind bereits in den zugrunde liegenden Tabellen enthalten). Danke für die Antwort.
Troy
1
Ich denke, das ist der Punkt, den man machen muss. Sie sollten keine FKs in der Ansicht benötigen, solange die zugrunde liegenden Tabellen die FKs enthalten.
Derek Downey
2
@DTest - Es kann sehr nützlich sein, Einschränkungen, einschließlich Prüf-, Eindeutigkeits- und Fremdschlüsseleinschränkungen, auf eine Ansicht anwenden zu können (insbesondere, wenn die Ansicht Daten aggregiert). Es kommt nur vor, dass keine aktuellen RDBMS Einschränkungen für Ansichten erzwingen, selbst wenn Sie diese erstellen können.
Jack sagt, versuchen Sie es mit topanswers.xyz
@ JackDouglas Genau richtig! Tatsächlich bin ich hierher gekommen, um herauszufinden, ob MySQL eine solche Funktion unterstützt.
Stijn de Witt
3

Nein, im engeren Sinne des Wortes können Sie keine Fremdschlüssel für Ansichten festlegen. Hier ist warum:

InnoDB ist die einzige integrierte Speicher-Engine für MySQL, die Fremdschlüssel enthält. Jede InnoDB-Tabelle wird in information_schema.tables mit engine = 'InnoDB' registriert .

Ansichten sind zwar in information_schema.tables registriert, verfügen jedoch über eine NULL-Speicher-Engine. In MySQL gibt es keine Mechanismen, um Fremdschlüssel in einer Tabelle mit einer undefinierten Speicher-Engine zu haben.

RolandoMySQLDBA
quelle