Owy błąd SQL L3020 ma miejsce przy projektowaniu diagramu UML i ustawieniu dwóch kluczy obcych tabeli podrzędnej wskazujących na ten sam klucz główny w tabeli nadrzędnej.
Dokładna treść błędu to:
nazwa_diagramu.VSD : błąd L3020: XXXXX_FK1: Relacja klucza obcego obejmuje te same tabele nadrzędne i podrzędne co XXXXX_FK2, ale nie zawiera różnych fraz orzeczenia (zwykłych i odwrotnych).
Błąd ten oczywiście uniemożliwia nam wygenerowanie skryptu DLL, którego oczekujemy od Visio Enterprise Architecta. :)
Błąd SQL L3020 – istota
Głównym problemem dla samego SQLa jest odróżnienie obu relacji pomiędzy tabelą nadrzędną i podrzędną. Oczywiście nazwa fizyczna relacji jest różna. W definicji relacji w Visio wskazujemy na różne kolumny w tabeli podrzędnej. Więc o co chodzi?
A no chodzi o tzw. frazy orzeczenia (verb phrase i/lub reverse phrase). Znajdziemy je w kategorii ‘Nazwa’ w właściwościach konkretnej relacji na diagramie UML.
O ile w polskim nazewnictwie ciężko dojść o co chodzi, po angielsku jest to banalnie proste.
Standardowo jako reverse phrase (frazę odwrotną) mamy określenie ‘is of’.
Tak więc np.
FK1 stolica w tabeli Panstwa wskazuje na PK1 nazwa_miasta w tabeli Miasta.
Co za tym idzie:
PK1 encji miasta is of encji Panstwa.
By uniknąć problemów jak L3020, musimy to po prostu uściślić.
Rozwiązanie:
Co więc robimy?
Sprawiamy, że będziemy czytać relację jako:
PK1 encji miasta is stolica of encji Panstwa.
Proste prawda?
W polskiej wersji językowej, podobnie jak tutaj dodajemy nazwe kolumny w fazie odwrotnej zaraz po ‘z’, np.
z stolica
I uściślamy dla obu relacji (zamiast stolica wstawiamy nazwę kolumny tabeli podrzędnej konkretnej relacji).
One thought on “SQL Error L3020”