![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 15.03.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Piszę sobie bazę danych z mailami, które mogą wymieniać użytkownicy pomiędzy sobą. Nie są to prawdzie maile, tylko rekordy w bazie danych: id odbiorcy, id nadawcy, treść i inne techniczne kolumny. Planuję moją bazę danych, powiedzmy, na 1000 użytkowników, każdy z nich odbierze łącznie z 5000 maili (tak dużo, bo dużo będzie maili generowanych automatycznie lub rozsyłanych do większej grupy osó ![]() Jak powinna wyglądać architektura takiej bazy danych w SQL? Pomysł #1 Jedna tabela, w której indeksem jest id odbiorcy, id nadawcy Tabela nazywa się "maile" i jest przeglądana za każdym razem, gdy skrzynkę mailową odwiedzi dowolny użytkownik używając "SELECT * FROM miale WHERE id_odbiorca={$id} OR id_nadawca={$id}" Pomysł #2 Jedna tabela na każdego użytkownika Tabele nazywają się "maile_{$id}", każdą tabelę przeszukuje tylko jeden użytkownik "SELECT * FROM maile_{$id}" W pomyśle #1 rekord z mailem jest wspólny dla nadawcy i odbiorcy. W pomyśle #2 ten sam mail jest zapisany osobno w tabeli nadawcy, osobno w tabeli odbiorcy. Pomysł #2 zajmuje zatem 2x więcej miejsca... ale czy daje jakąkolwiek poprawę szybkości przeglądania maili, skoro pomysł #1 jest indeksowany? Pytam, ponieważ nie mam możliwości porównania obu typów architektury - wybór jednej wiąże się z ogromnymi zmianami w całym interface. Nie oczekuję jednoznacznej odpowiedzi, a raczej wasze doświadczenia w tej sprawie. Wybrałem pomysł #1 i zastanawiam się, czy nie jest to błąd. Proszę o pomoc ![]() |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Zdecydowanie nie...
Do #1 warto dodać pole "readed" |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 15.03.2013 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:00 |