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)
quelle
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.
quelle