Tabele połączeń a tablice kluczy obcych?
Modeluję relację wiele-do-wielu, gdzie relacja jest dostępna przez większość czasu tylko z jednej strony. To bardziej hierarchia, do której dostęp jest odgórny, a nie odwrotnie.
Ankieta ma i należy do wielupytania ma i należy do wieluOdpowiedzi.
Obie relacje muszą mieć wiele do wielu, ponieważ to samo pytanie może być ponownie wykorzystane w różnych badaniach i tej samej odpowiedzi w wielu pytaniach. To jest wymaganie.
Standardowa implementacja M2M wykorzystałaby dwie tabele połączeń,surveys_questions
iquestions_answers
. Zamiast tego myślę o użyciu tablic całkowitych PostgreSQL do przechowywaniaquestion_ids
w ankiecie ianswer_ids
w pytaniu.
Możemy użyć operatora ANY do zapytania wszystkich wierszy pasujących do tablicy kluczy obcych.
Jak zapytalibyśmy o wszystkie ankiety z pytaniami i odpowiedziami na pytania za pomocą SQL?
Jak możemy dopasować kolejność wierszy zwracanych przez tablicę kluczy obcych? to znaczy. Używanie question_ids = [1,2,3] gwarantuje zwrot wierszy pytań z kolejnością 1, 2, 3.
Jak to działa pod względem wydajności w porównaniu z tabelami połączeń (przy założeniu odpowiednich indeksów, niezależnie od tego, jakie mogą być)?
Czy zasugerowałbyś to? Czy są jakieś zasoby dotyczące modelowania M2M w ten sposób?
Aktualizacja
Pojawiła się propozycja dodania integralności referencyjnej dla tablicowych kluczy obcych do PostgreSQL 9.3, ale nie została uwzględniona:http://blog.2ndquadrant.com/postgresql-9-3-development-array-element-foreign-keys/
Pytanie o utrzymanie porządku przy użyciu tablicy kluczy obcychPOŁĄCZENIE PostgreSQL z typem tablicy z elementami tablicy porządek, jak zaimplementować?