2013-06-02 5 views
7

Przez kilka dni pracowałem nad main.db bazy danych Skype'a i jest to coś, czego jeszcze nie odkryłem. Naturalnie, to pytanie będzie bardzo specjalnie dla Skype struktury main.db. (Zastrzeżenie)skype main.db - różnica między rozmowami i rozmowami

Wydaje się, że wszystkie niezbędne informacje, które są potrzebne w tabelach Conversations, Messages, Participants.

Message tabela zawiera rzeczywistą dziennik, co zostało powiedziane, odbiorca (s), znacznik czasu i klucz obcy convo_id (choć nie egzekwowane), aby połączyć się z Conversation której należy wiadomość.

Conversation istnieje do przechowywania agregaty Message i styki, które uczestniczą w.

Participants stół działa na wiele-do-wielu tabeli łącznika między stołem Conversations i Contacts tabeli.

Co mnie łączy to tabela Chats i Chatmembers. Chatmembers działa pod numerem Chats co tabela Participants działa na stole Conversations; łączenie kontaktów i rozmów - lub "czatów".

Zawartość Chats jest podobna do Conversations, z tą różnicą, że nie ma żadnego agregatu do tabeli Message. Niemożliwe jest mapowanie z tabeli Messages do tabeli Chats, do której należy log (wiersz tabeli Messages).

Chats i Conversations udostępnić klucz obcy, Conversations tabela zawiera kolumnę o nazwie chat_dbid która łączy w tabeli Chats. Są jednak wiersze w tabeli Conversations, które mają zerowe pole chat_dbid, a nie wszystkie wiersze w polu Chats mają wartość id odpowiadającą polu chat_dbid w tabeli .

Tabela Chats jest ciągle aktualizowana i rozpoznaję niektóre rozmowy lub rozmowy - ostatnio oparłem się na sygnaturce czasowej i jej członkach.

Czy ktoś wie dokładnie, co robi stół Chats? A może jaka jest różnica i uzasadnienie tabeli Chats i tabeli ?

Kiedy szaleńczo rozglądałem się za tym, mogłem znaleźć tylko one like that talked about main.db structure i nie było to zbyt pomocne.

Według link Chats

Zapewnia czaty, w których użytkownik uczestniczył.

i Conversations

Udostępnia listę rozmów, w których użytkownik brał udział.

Jaka jest ich terminologia dotycząca czatów i konwersacji? Czym się różnią?

To doprowadzało mnie do szału.

Odpowiedz

4

Wczoraj również przeglądałem tabelę main.db w skypie. Poniżej znajdują się moje wyniki.

Tabela konwersacji jednoznacznie identyfikuje rozmowę z konkretnym kontaktem (lub utworzonym kontaktem grupowym). Konwersacja pociąga za sobą całą komunikację: wiadomości czatu, wiadomości głosowe, transfery plików, połączenia wykonywane przez konkretny kontakt. Większość tabel zawiera odniesienia do wpisu w tej tabeli. Tabela wiadomości ma convo__id, Tabela czatów ma conv_dbid, Transfery ma convo_id i podobnie.

Tabela komunikatów: wprowadzanie komunikatów nie zawsze odbywa się w trybie czatu. Jeśli wpis jest czatem, to pole jego nazwy jest wypełnione. Wygląda na to, że czaty i wiadomości mają jeden do wielu relacji. chat jest zbiorem wiadomości utrzymywanych według jakiegoś identyfikatora (najprawdopodobniej dzień nie jest pewny). "type = 61" wydaje się być normalnym komunikatem: wiadomość wpisana przez użytkownika. Inne typy wydają się być generowanymi automatycznie wiadomościami na przykład. msg otrzymasz, jeśli połączenie zostanie przerwane.

Mam nadzieję, że to pomoże.

2

Wygląda na to, że czaty są zbędne. Wiadomości są pogrupowane w czaty, po przemyśleniu, możesz mieć kilka czatów w jednej rozmowie, a następnie niektóre wiadomości poza dowolnym czatem. Zasady grupowania są niejasne, być może w miarę upływu czasu.

Grupowanie polega na ustawieniu pola chatname grupy wiadomości na tę samą wartość. Nazwy czatu wyglądają jak #SenderId/$TargetId;ChatId lub #SenderId/ChatId dla Czatów w grupie.

Czat nie wydają się mieć żadnego konkretnego znaczenia i mogą się różnić na różnych komputerach.

Nie każdy czat otrzymuje wpis w tabeli Czaty: SELECT DISTINCT(chatname) FROM Messages daje o wiele więcej wpisów niż SELECT * FROM Chats. Nie wszystko, co wchodzi w skład chatname, to nazwa czatu z Czatów. Czasami jest to identyfikator rozmowy (== identyfikator grupy lub skypename).

Różne instancje Skype również grupują te same zsynchronizowane wiadomości w czatach.

Zasadniczo czaty nie są ważne, grupują wiadomości arbitralnie, nie zawierają żadnych kluczowych danych o tym, kto wysłał komu co.

To jak rozumiem innych stołów pracy:

Contacts - to każdy, którego skypename jest wymieniony w bazie danych, a nawet osoby, które nigdy nie wiedział, o (który powiedział coś w pokojach konferencyjnych słuchałeś w czasie). is_permanent oznacza znaki na liście kontaktów.

Conversations - jest to połączenie twoich rzeczywistych kontaktów i czatów grupowych, do których kiedykolwiek dołączyłeś. Oto, co należy postrzegać jako "listę kontaktów". Jeśli potrzebujesz kontaktów, których nigdy nie otrzymałeś, dodaj Contacts WHERE is_permanent=1. Jeśli chcesz tylko obecne kontakty, filtruj według is_bookmarked lub coś w tym stylu.

Wygląda na to, że nie ma duplikatów ani podziałów. Jeden kontakt = jedna rozmowa, jeden pogawędka = jedna rozmowa.Jeśli rozmawiasz z osobą kontaktową i dodajesz inną osobę, poprzednie wiadomości pozostają w rozmowie tego kontaktu, a następne otrzymują własną konwersację.

Messages - to wszystkie wiadomości i wydarzenia w historii wysłanych lub odebranych:

  • convo_id - zawsze ustawione, zawsze odwołuje się do rozmowy. W ten sposób identyfikujesz, który kontakt/wiadomość grupowa wysłał wiadomości.

  • chatname - zawsze ustawiane, czasami odwołuje się do czatu z Czatów, czasem jest to czat, który nie jest w Czatach, czasami jest to identyfikator grupy lub nazwa skoczu z Rozmów. W większości przypadków można to zignorować, lub możesz grupować wiadomości według tego pola wizualnie.

  • author, from_name - którzy wysłali tę wiadomość i ich nick w tym czasie, zawsze ustawieni poprawnie.

  • dialog_partner - bardzo zawodne, różne wartości dla tej samej wiadomości na różnych komputerach

  • participant_count - czasem określonych, czasami nie, tak samo jak z dialog_partner: zawodne.

  • identities - wspomina wszystkie skypeny związane z wydarzeniem, a czasami nie. Zasady są niejasne, nierzetelne.

Powiązane problemy