Odczyt typu relacji z bazy

0

Witam ma pytanie odnośnie określenia typu relacji z informacji które posiadam.

Mam pewne informacje o jakiś tabelach, takie jak :
-nazwa tabeli
-nazwa kolumny
-czy kolumna jest nullable
-czy kolumna jest primary key
-jaka jest maksymalna wartość / długość znaku dla danej kolumny

  • parę innych (mniej znaczących)

Dodatkowo posiadam tabelę z informacjami o relacjach (FK), która wygląda następująco :

  • nazwa 1 tabeli
  • nazwa 1 kolumny
  • nazwa 2 tabeli
  • nazwa 2 kolumny

Na podstawie tych danych potrzebuje określić typy relacji : 0..1, 1..1, 0..n, 1..n, relacja n..n jest nie ważna, gdyż są 2 relacje 1..n

I teraz pytanie, jak to zrobić, mam pewne założenia ale nie wiem czy są one dobre.

  1. 0/1 do czegoś

Ogólnie to czy jest relacja będzie 0 lub 1 do czegoś, chcę określić na podstawie pola, jeśli jest ono nullable to 0, jeśli nie jest nullable to 1 - słusznie ?

  1. Relacje 0/1..1

Relacja 1..1 to rozbicie jednej tabeli na wiele. Jak wiemy klucz główny może obejmować więcej niż 1 kolumnę, co za tym idzie :

relację 1..1 chcę określić na podstawie czy wszystkie kolumny (PK) z tabeli1 mają relację(FK) z wszystkimi kolumnami (PK) z tabeli2.

  1. Relacja 0/1..n

Tutaj mam największy problem, teoretycznie nie wiem czy zrobić to na takiej zasadzie, że jeśli relacja nie jest 1..1 to jest 1..n

Relacja jest 0/1..n jeśli kolumna z tabeli1 ma relację(FK) z inną kolumną z tabeli2, ale np. kolumna z tabeli piewszej jest PK, zaś kolumna z tabeli 2 nie jest PK.

Czy moje założenia są słuszne, czy może przeoczyłem jakieś możliwości ?

Proszę o rady.

0
  1. tak
  2. nie
  3. nie
    2 i 3 można określić tylko i wyłącznie wiedząc "co autor miał na myśli". Ew. można na podstawie danych w tych tabelach stwierdzić, że NIE JEST 0/1..1 ale NIGDY nie będziesz miał pewności, czy relacja jest 0/1..1 nie okaże się nagle 0/1..n jak ktoś wstawi rekord spełniający tą zależność.

BTW nie wiem czy to Ty czy ktoś inny jakiś czas temu pytał o praktycznie to samo. Odpowiedź od tamtego czasu się nie zmieniła - na podstawie DDLa NIE DA SIĘ określić czy relacja jest 0..1 1..1 0..n 1..n m..n. Takie rzeczy określa PROJEKTANT na podstawie wiedzy własnej o danych, które będą w bazie trzymane

0

Nie da się określić typu relacji na podstawie struktury. Jeżeli mam dwie tabele A i B będące ze sobą w relacji, gdzie tabela B ma klucz obcy do tabeli A, to typ relacji da się określić tylko na podstawie rekordów. Jeżeli w tabeli A każdy rekord ma odpowiadający rekord w tabeli B i odwrotnie, to mamy relację 1..1, jeżeli w tabeli A istnieje rekord, który nie ma odpowiednika w tabeli B, to mamy relację 0..1 lub 0..n.

Istnienie klucza obcego w tabeli B, którego pole jest NOT NULL nie jest gwarancją istnienia relacji 1..1.

0

Dzięki Panowie za odpowiedź

I przepraszam, jeśli pytanie było niedawno zadane (ja nie jestem autorem poprzedniego tematu) - nie przeszukałem wystarczająco forum ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1