Zagnieżdżone widoki mogą mieć sens. Po prostu uważaj, aby nie uczynić ich zbyt ogólnymi.
widziałem system, który miał widok z 14 tabel wymienionych wyraźnie, niektóre z nich wiąże się z self-dołącza zewnętrzny, a niektóre z „tabel” były same poglądy. Nie podobało mi się to bardzo, ale DBMS poradził sobie z tym zadziwiająco dobrze (biorąc pod uwagę, że powrócił pod koniec lat 80.). Wiele schematów zostało wygenerowanych maszynowo za pomocą narzędzia do modelowania danych.
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;
Zewnętrzna notacja sprzężenia jest specyficzna dla Informix (która teraz obsługuje także notację standardową SQL).
Należy zauważyć, że IBB_V_Post_Resp2 i IBB_V_Proj_Co2 są widokami. W rzeczywistości IBB_V_Proj_Co2 to widok 3-table, dokładnych danych brak ale postać:
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;
Oznacza to, że widok IBB_V_Project ma zewnętrzny samosprzężenie na IBB_Project. Widok IBB_V_Post_Resp2 prawdopodobnie obejmował również 3 tabele (moje notatki na ten temat były nieco niejasne, w 1993 r., Kiedy zapisałem tę informację).
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;
Kolumny Zzzz_Iref były albo seryjny lub INTEGER klucze obce przedstawieniu klucz seryjny.
Definicja widoku podstawowego odnosi się do 14 tabel, z 4 łączeniami wewnętrznymi i 9 łączeniami zewnętrznymi. Kiedy uwzględniane są widoki z odsyłaczami, to w sumie to 18 tabel z 7 wewnętrznymi łączeniami i 10 zewnętrznymi łączeniami.
+1, dobre pytanie, mnóstwo opinii, jak widać. Prawdopodobnie nie ma jednej uniwersalnej odpowiedzi. – DCookie