Dołącz do zależności
W teorii baz danych zależność łączenia jest ograniczeniem zestawu stosunków prawnych w schemacie bazy danych. Tabela podlega zależności łączenia jeśli zawsze można ją odtworzyć, wiele tabel z których każda ma podzbiór atrybutów . Jeśli z tabel w złączeniu ma wszystkie atrybuty tabeli , zależność złączenia nazywana jest trywialną
Zależność łączenia odgrywa ważną rolę w piątej postaci normalnej , znanej również jako postać normalna łączenia projektu , ponieważ można udowodnić, że jeśli schemat zostanie rozłożony w tabelach, do rozkład będzie bezstratnym rozkładem łączenia jeśli stosunki prawne dotyczące są ograniczone do zależności łączenia od nazywany .
Innym sposobem opisania zależności łączenia jest stwierdzenie, że relacje w zależności łączenia są od siebie niezależne.
W przeciwieństwie do zależności funkcjonalnych , nie ma solidnej i kompletnej aksjomatyzacji dla zależności łączenia, chociaż aksjomatyzacja istnieje dla bardziej wyrazistych języków zależności, takich jak zależności z pełnym typem. Jednak implikacje zależności łączenia są rozstrzygalne.
Definicja formalna
Niech będzie schematem relacji i niech będzie 1 .
Relacja _ _
- jeśli
Zależność łączenia jest trywialna, jeśli jedną z nich jest sama
Zależności łączenia dwuargumentowego nazywane są zależnościami wielowartościowymi jako historyczny artefakt faktu, że były badane przed przypadkiem ogólnym. Dokładniej, jeśli U jest zbiorem atrybutów, a R relacją nad nim, to R spełnia wtedy i tylko wtedy, gdy R spełnia
Przykład
Biorąc pod uwagę łańcuch pizzy, który modeluje zakupy w tabeli Zamówienie = {numer-zamówienia, nazwa-klienta, nazwa-pizzy, kurier}. Można wyprowadzić następujące zależności:
- nazwa-klienta zależy od numeru zamówienia
- pizza-name zależy od numeru zamówienia
- kurier zależy od numeru zamówienia
Ponieważ relacje są niezależne, istnieje następująca zależność sprzężenia: *((numer-zamówienia, nazwa-klienta), (numer-zamówienia, nazwa-pizzy), (numer-zamówienia, kurier)).
Jeśli jednak każdy klient ma własnego kuriera, może istnieć zależność łączenia w następujący sposób: *((numer-zamówienia, nazwa-klienta), (numer-zamówienia, nazwa-pizzy), (numer-zamówienia, kurier), ( nazwa-klienta, kurier)), ale *((numer-zamówienia, nazwa-klienta, kurier), (numer-zamówienia, nazwa-pizzy)) również byłyby prawidłowe. To sprawia, że oczywiste jest, że samo posiadanie zależności łączenia nie wystarczy do znormalizowania schematu bazy danych.