Tworzę interfejs API RESTful. Próbuję wybrać najlepszy sposób zaprojektowania tabel bazy danych wokół moich zasobów.
Początkowo wydawało mi się, że dobrym pomysłem byłby wybór tabeli na zasób, ale teraz martwię się, że spowoduje to wykładniczo większe tabele, im dalej w dół łańcucha zasobów.
Wyobraź sobie na przykład, że mam trzy zasoby - użytkowników, klientów, sprzedaż. Użytkownicy są subskrybentami mojego interfejsu API, klienci są klientami użytkowników, a sprzedaż to zakupy dokonywane przez każdego klienta na koncie użytkownika.
Dostęp do zasobów sprzedaży można uzyskać w następujący sposób
GET /users/{userID}/clients/{clientID}/sales/{salesID}
Więc jeśli jest 10 użytkowników, każdy z 10 klientami, a dla każdego klienta występuje 10 sprzedaży, rozmiar tabeli staje się większy w miarę, jak idziemy w dół łańcucha zasobów.
Jestem całkiem pewien, że SQL poradzi sobie z dużymi tabelami, ale nie jestem pewien, w jaki sposób odczyt i zapis spowolnią. Powyższy przykład może tego nie ilustruje, ale mój interfejs będzie stopniowo zapisywał i odczytywał kolejne etapy łańcucha zasobów. Dlatego mam scenariusz, w którym największe tabele w mojej bazie danych będą czytane i zapisywane więcej razy niż mniejsze tabele.
Konieczne będzie także dołączenie do tabel przed uruchomieniem zapytań. Powodem jest to, że pozwalam każdemu użytkownikowi mieć klienta o tej samej nazwie. Aby uniknąć uzyskania niewłaściwych danych klienta, do tabeli użytkowników i tabel klientów dołącza {identyfikator użytkownika}. Dotyczy to również sprzedaży. Czy dołączanie do dużych tabel i uruchamianie odczytów i zapisów jeszcze bardziej spowolni?