Relacja n:n - klucz podstawowy

0

Robię bazę danych w której dwie tabele będą w relacji "wiele do wiele". Pierwsza tabla to tabela osób pobierających pewne dokumenty a druga tabela to tabela dokumentów. Jedna osoba może pobrać wiele dokumentów i jeden dokument może być pobrany wiele razy. Muszę między nimi stworzyć tabelę pośrednią "pobrań" z zawierającą id osoby i id dokumentu i datę pobrania. Zakładam że w przyszłości obie tabele (osób i dokumentów) będą bardzo duże (kilka tysięcy rekordów) i ilość pobrań będzie olbrzymia co może odbić się na szybkości wyszukań po tej tabeli. Podwójne pobranie tego samego dokumentu przez ta samą osobę ma być niedopuszczalne więc bardzo częstym przeszukaniem w tabeli pośredniej będzie sprawdzenie czy dana osoba pobrała już dany dokument, a jeżeli tak to kiedy. Czy w takiej tabeli pośredniej warto tworzyć klucz główny z dwóch kolumn: id osoby i id dokumentu które sa przecież kluczami obcymi pobranymi z tabel "osób" i "dokumentów". Czy wyszukiwanie w tabeli pośredniej po takim kluczu głównym będzie działało szybko (skuteczna indeksacja po dwóch kolumnach)? Czy może to nieść w sobie jakieś ryzyko?

0

Jeśli masz zamiar wyszukiwać po tych dwóch kolumnach to jak najbardziej powinieneś dodać do nich klucz. Ryzyko będzie takie, że baza będzie zajmować więcej miejsca, ale będzie działać szybciej.

Małe pytanie w kwestii pobierania. Chcesz zablokować możliwość pobrania drugi raz tego samego pliku, a co jeśli użytkownik przerwie lub zostanie przerwane pobieranie z przyczyn niezależnych od niego? W tedy jak pobierze plik, który teoretycznie już pobrał, a praktycznie ma tylko jego część?

0

Wpis do bazy ma być dokonywany po pozytywnym ukończeniu ściągania. Dziki za informację o tym kluczu. Szybkość wykonywania zapytań jest tu bardzo ważna.

0

Najlepiej będzie jeśli zrobisz sobie porównanie jak będzie się zachowywać baza w przypadku dużej ilości danych. Wygeneruj jakieś losowe wpisy (oczywiście dość sporą ilość) i sprawdź jak będzie wyglądało zapytanie bez i z kluczem.

0
Franky41 napisał(a):

Wpis do bazy ma być dokonywany po pozytywnym ukończeniu ściągania.

Nie dowiesz się tego. Nie ma takiej możliwości bez zastosowania dodatkowego oprogramowania po stronie klienta, bo skrypt wykona się do końca nawet jeśli użytkownik nie odbierze bajta odpowiedzi.

0

Dzięki za podpowiedzi.

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