2010-03-24 12 views
11

Znaleźliśmy następującą sytuację w naszej bazie danych. Mamy tabelę "A" i tabelę "B", które mają związek M2M. Tabela powiązań nosi nazwę "AB" i zawiera kolumnę FK do tabeli "A" i kolumnę FK do tabeli "B". Zidentyfikowaliśmy potrzebę przechowywania dodatkowych danych na temat tego powiązania. Na przykład data, kiedy nastąpiło powiązanie i kto utworzył stowarzyszenie itp. Postanowiliśmy umieścić te dodatkowe kolumny w tabeli powiązań "AB". Jednak coś mi mówi, że jest to mile widziane przez purystów baz danych. Z drugiej strony nie ma sensu tworzenie dodatkowej tabeli do przechowywania powiązanych danych.Wiele do wielu tabel asocjacyjnych - czy zwyczajowo umieszczać dodatkowe kolumny w tych tabelach?

Jaka jest dominująca myśl na ten temat?

Odpowiedz

10

Nie widzę w tym nic złego. Jeśli informacja dotyczy samego powiązania, wydaje się, że jest to absolutnie poprawne miejsce do przechowywania.

Jeśli utworzysz nową tabelę do zapisania tego, będzie ona po prostu odnosić się do tabeli asocjacji w każdym razie jeden do jednego. Zasadniczo byłoby to tylko rozszerzeniem tabeli powiązań.

4

Jeśli dane rzeczywiście dotyczą relacji, a nie jednej z poszczególnych jednostek ... to tak, umieść ją w tabeli przestawnej.

4

Najlepiej przechowywać dane o powiązaniu w samej tablicy asocjacyjnej. Nigdy nie słyszałem o tym, by ktokolwiek marszczył brwi na tej metodzie ... przyspieszy to przechowanie tych informacji w osobnej tabeli, ponieważ pozwoli ci to odzyskać.

9

Zrobiłem to już wcześniej i nie sądzę, że jest w tym coś złego. Jeśli dane dotyczą relacji, tak jak w przypadku, gdy jest to data, w której nastąpiło powiązanie, i nie należą do konkretnej tabeli lub drugiej, tabela powiązań jest miejscem, w którym można ją umieścić.

3

W tym projekcie traktujesz samo stowarzyszenie jako byt. Jeśli ta encja świata rzeczywistego, relacja między pozostałymi dwiema jednostkami, ma swoje własne atrybuty, wówczas tabela reprezentująca tę relację powinna również reprezentować atrybuty tej relacji.

Jeśli utworzyłeś oddzielną tabelę, z jakiej jednostki rzeczywistej modelowałbyś się przy tej tabeli? Dodatkowe informacje dotyczące, ale nie bezpośrednio, części relacji między dwoma podmiotami? Trudno to sobie wyobrazić, wydaje się, że nie ma większego sensu w designie i prawie na pewno będzie gorzej.

+0

@jmgant - Dobrze powiedziałem, dziękuję. –

1

"Coś mi jednak mówi, że jest to mile widziane przez purystów baz danych."

Nie mogę sobie wyobrazić żadnej osoby, która ma wiedzę w zakresie projektowania baz danych i która byłaby niezadowolona z twojego projektu, jeśli ten projekt naprawdę jest dokładnym modelem rzeczywistości, z którą masz do czynienia.

1

W poleceniu this recent answer, zalecam tabelę linków zamiast prostej relacji FK. Jedną z korzyści jest to, kiedy związek zaczyna mieć coraz więcej danych powiązanych z nim tak, że staje się bytem. W szczególności ze skutecznymi datami i zmianami, nawet w prostej hierarchii wiele do jednego, nadal może być sensownym używanie projektu tabeli połączeń wielu do wielu. Najwyraźniej już potrzebujesz tablicy linków - teraz jest jasne, że istnieją inne atrybuty związane z tą relacją.

Oczywiście, okazuje się, że to właściwe miejsce na umieszczenie tych atrybutów; prawdopodobnie napotkacie pewne trudności z umieszczeniem ich w dowolnej tabeli, albo z normalizacją, albo po prostu niepoprawną semantyką.Daje to również dobre opcje indeksowania, ponieważ można dodać indeks daty wejścia w życie lub statusu relacji do tej względnie wąskiej tabeli bez decydowania, które indeksy mogą być konieczne do dodania w innych tabelach encji

Nie sądzę każdy doświadczony projektant baz danych sprzeciwiłby się, gdybyś pokazał projekt i jak jego funkcje projektowe i zalety zostały użyte w praktyce. Dla mnie nie wymagałoby to obszernego uzasadnienia projektu.

Powiązane problemy