Verschachtelte Ansichten können sinnvoll sein. Achten Sie nur darauf, dass Sie sie nicht zu allgemein gestalten.
Ich habe ein System gesehen, das eine Ansicht mit 14 ausdrücklich erwähnten Tabellen hatte, von denen einige mit äußeren Self-Joins verbunden waren, und einige der "Tabellen" waren selbst Ansichten. Das gefiel mir nicht besonders, aber das DBMS kam damit erstaunlich gut zurecht (wenn man bedenkt, dass das in den späten 80er Jahren war). Ein großer Teil des Schemas wurde von einem Datenmodellierungstool maschinell erstellt.
CREATE VIEW IBB_V_Project AS
SELECT A.Project_Iref,
A.Section_Iref,
B.Section_Eref,
N.Company_Iref,
N.Company_Name,
A.Product_Desc,
A.Project_Type_Iref,
D.Project_Type,
A.Person_Iref,
F.Full_Name,
A.Respon_Iref,
G.Post_Location,
A.Project_Stat_Iref,
E.Project_Status,
A.Source_Iref,
I.Source,
A.Sic_Iref,
L.Sic_Eref,
A.Op_Activity_Iref,
M.Op_Activity_Desc,
A.Involve_Iref,
K.IBB_Involvement,
A.Nature_Iref,
C.Nature_Of_Next_Act,
A.Internat_Mobile,
A.Whether_Cop_Case,
A.Closed_Ind,
A.Next_Action_Date,
A.Creation_Date,
A.Last_Edit_Date,
A.Last_Editor_Iref,
H.Logname
FROM IBB_Project A,
IBB_Section B,
IBB_R_Proj_Type D,
IBB_R_Project_Stat E,
IBB_Personnel H,
OUTER IBB_R_Next_Act C,
OUTER IBB_Personnel F,
OUTER (IBB_Post_Respon X, OUTER IBB_V_Post_Resp2 G),
OUTER IBB_R_Source I,
OUTER IBB_R_Involvement K,
OUTER IBB_Sic L,
OUTER IBB_Op_Act M,
OUTER IBB_V_Proj_Co2 N
WHERE A.Section_Iref = B.Section_Iref
AND A.Project_Type_Iref = D.Project_Type_Iref
AND A.Project_Stat_Iref = E.Project_Stat_Iref
AND A.Last_Editor_Iref = H.Person_Iref
AND A.Nature_Iref = C.Nature_Iref
AND A.Person_Iref = F.Person_Iref
AND A.Respon_Iref = X.Respon_Iref
AND X.Respon_Iref = G.Person_Iref
AND A.Source_Iref = I.Source_Iref
AND A.Sic_Iref = L.Sic_Iref
AND A.Op_Activity_Iref = M.Op_Activity_Iref
AND A.Project_Iref = N.Project_Iref
AND A.Involve_Iref = K.Involve_Iref;
Die Notation der äußeren Verknüpfung ist spezifisch für Informix (das jetzt auch die SQL-Standardnotation unterstützt).
Beachten Sie, dass IBB_V_Post_Resp2 und IBB_V_Proj_Co2 beide selbst Ansichten sind. Tatsächlich war IBB_V_Proj_Co2 eine 3-Tabellen-Ansicht, deren genaue Details nicht bekannt sind, aber von der der Form:
CREATE VIEW IBB_V_Proj_Co2 AS
SELECT A.Project_Iref,
A.Some_Other_Col col01,
B.Xxxx_Iref,
B.Some_Other_Col col02,
C.Yyyy_Iref,
C.Some_Other_Col col03
FROM IBB_Project A,
OUTER (IBB_R_Xxxx B, IBB_R_Yyyy C)
WHERE A.Xxxx_Iref = B.Xxxx_IrEf
AND B.Yyyy_Iref = C.Yyyy_Iref;
Dies bedeutet, dass die Ansicht IBB_V_Project eine äußere Selbstverknüpfung mit IBB_Projekt hat. Die Ansicht IBB_V_Post_Resp2 umfasste wahrscheinlich 3 Tabellen involviert (meine Notizen dazu waren damals, 1993, als ich diese Informationen aufzeichnete, etwas unklar).
CREATE VIEW IBB_V_Post_Resp2 AS
SELECT A.Person_Iref,
A.Some_Other_Col col01,
B.Xxxx_Iref,
B.Some_Other_Col col02,
C.Yyyy_Iref,
C.Some_Other_Col col03
FROM IBB_Personnel A,
IBB_R_Xxxx B,
IBB_R_Yyyy C
WHERE A.Xxxx_Iref = B.Xxxx_Iref
AND B.Yyyy_Iref = C.Yyyy_Iref;
Die Zzzz_Iref-Spalten waren entweder SERIAL- oder INTEGER-Fremdschlüssel die auf einen SERIAL-Schlüssel verweisen.
Die Definition der primären Ansicht bezieht sich auf 14 Tabellen, mit 4 inneren Joins und 9 äußeren Joins. Wenn die Querverweise berücksichtigt werden, gibt es insgesamt 18 Tabellen, mit 7 inneren und 10 äußeren Joins.
1 Stimmen
+1, gute Frage, viele Meinungen, wie Sie sehen können. Wahrscheinlich gibt es keine allgemeingültige Antwort.