📓 SQLite — FTB

FTB* (Family Tree Builder - MyHeritage)

Wraz z wydaniem przez MyHeritage w 2016 roku, 8 odsłony Family Tree Builder-a, program dołączył do czołówki programów Genealogicznych używających do magazynowania danych jednoplikowej OupenSocerowej — wieloplatformowej bazy dany SQLite3. Innymi programami (prócz FTB) korzystającymi z tego rozwiązania (podobnie jak FTB w sposób jawny) są: RootsMagic od 4 osłony i GRAMPS od 5 odsłony, dodatkowo Ancestry FamilyTreeMaker, wykorzystuje je także, aczkolwiek baza jest zaszyfrowana i tylko dedykowane odpłatne narzędzie od Ancecestry jest w stanie pozwolić na przeglądanie bazy SQLite3 zaadaptowanej przez FTM.

Otwarta baza danych SQLite3 pozwala na pisanie, różnorakich dodatkowych narzędzi tak jak ma to miejsce w przypadku społeczności RootsMagic, FTB stosunkowo niedługo jest na SQLite3, stąd też zapewne brak czegokolwiek. Zamiast eksportować, tracą sporą ilość danych swoje projekty genealogiczne do solidnie przestarzałego GEDCOM, aby zaserwować wykresy, czy inne narzędziowe sztuczki swoim, danym. Wystarczy udzielić narzędzia dostępu do odczytu danych, pomijając niepotrzebny proces eksportu i importu.

Encje Bazy sqlite3 w FTB8

👉🏼 Wiadomości wstępne: 🗃️.._lang_data — 🔖data_language

GEDCOM, jak państwo zapewne wiedzą pozwala przechowywać, dane tylko w jednym nieokreślonym języku, inaczej jest w FTB, w obecnej wersji 8.0.0.8516 (z marca 2019) posiada wsparcie dla 40 języków: (0 – Angielski), (1 – Hebrajski), (2 – Francuski), (3 – Niemiecki), (4 – Włoski), (5 – Hiszpański), (6 – Portugalski-Portugalia), (7 – Rosyjski), (8 – Holenderski), (9 – Grecki), (10 – Turecki), (11 – Jidisz), (12 – Portugalski-Brazylia), (13 – Bokmål-Norweski), (14 – Duński), (15 – Litewski), (16 – Polski), (17 – Szwedzki), (18 – Ukraiński), (19 – Węgierski), (20 – Czeski), (21 – Fiński), (22 – Afrykański), (23 – Słoweński), (24 – Słowacki), (25 – Albański), (26 – Kataloński), (27 – Bośniacki), (28 – Estoński), (29 – Łotewski), (30 – Chorwacki), (31 – Rumuński), (32 – Bułgarski), (33 – Serbski), (34 – Arabski), (35 – Indonezyjski), (36 – Perski), (37 – Chiński — uproszczony), (38 – Japoński), (39 – Koreański), (40 – Chiński — tradycyjny).

Tabele zakończone sufiksem "_lang_data", posiadają pole "data_language", jest w nim przechowywana wartość odpowiadająca kodowi języka wyszczególnionego powyżej, tego języka, w którym przechowujemy nasze dane. Oczywiście możemy zamieścić tłumaczenia w dowolnym języku spośród wspieranej czterdziestki, ważne, aby dla danego obiektu w danym języku był tylko jeden rekord spośród każdego z wybranych języków.

👉🏼 Przechowywanie: zadań do wykonania.

👉🏼 Poza opisaniem zadania, za pośrednictwem tytułu (maks 255 znaków), opisu, i lokalizacji; oraz oznaczeniem, osób, do których ono ma zastosowanie, wskazujemy priorytet i status prac nad zadaniem. Priorytet i status, są kodowane w tabeli, wartościami, oto i one:

🗃️task_main_data — 🔖priority

(1 – Niski), (2 – Normalny), (3 – Wysoki)

🗃️task_main_data — 🔖status

(1 – Nie rozpoczęte), (2 – W trakcie), (3 – Utworzone), (4 – Przesunięte), (5 – Usunięte)

--Table: task_lang_data
--DROP TABLE task_lang_data;

CREATE TABLE task_lang_data (
  task_lang_data_id  integer NOT NULL PRIMARY KEY AUTOINCREMENT,
  task_id            int NOT NULL,
  data_language      tinyint unsigned NOT NULL DEFAULT '0',
  title              varchar(255) DEFAULT '',
  description        text DEFAULT '',
  location           text DEFAULT '',
  /* Foreign keys */
  FOREIGN KEY (task_id)
    REFERENCES task_main_data(task_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

CREATE INDEX task_lang_data_task_id_index
  ON task_lang_data
  (task_id);
--Table: task_main_data
--DROP TABLE task_main_data;

CREATE TABLE task_main_data (
  task_id           integer NOT NULL PRIMARY KEY,
  delete_flag       tinyint unsigned NOT NULL DEFAULT 0,
  priority          tinyint NOT NULL DEFAULT 0,
  status            tinyint NOT NULL DEFAULT 0,
  "guid"            varchar(255) DEFAULT '',
  create_timestamp  int DEFAULT 0 -- Timestamp by Unix Time, the number of milliseconds since 1970-01-01 00:00:00 UTC
);

CREATE INDEX task_main_data_delete_flag_index
  ON task_main_data
  (delete_flag);
--Table: task_to_individual_connection
--DROP TABLE task_to_individual_connection;

CREATE TABLE task_to_individual_connection (
  task_to_individual_connection_id  integer NOT NULL PRIMARY KEY AUTOINCREMENT,
  task_id                           int NOT NULL,
  individual_id                     int NOT NULL,
  "guid"                            varchar(255) DEFAULT '',
  delete_flag                       tinyint unsigned NOT NULL DEFAULT 0,
  /* Foreign keys */
  FOREIGN KEY (task_id)
    REFERENCES task_main_data(task_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE, 
  FOREIGN KEY (individual_id)
    REFERENCES individual_main_data(individual_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE
);

CREATE INDEX task_to_individual_connection_delete_flag_index
  ON task_to_individual_connection
  (delete_flag);

CREATE INDEX task_to_individual_connection_individual_id_index
  ON task_to_individual_connection
  (individual_id);

CREATE INDEX task_to_individual_connection_task_id_index
  ON task_to_individual_connection
  (task_id);

Diagram związków encji (FTB—SQLite3)

Wielojęzykowość danych w FTB