---
title: Mapowanie danych dla obiektów binarnych
date: 2020-10-21
categories:
  - data-integration
  - database-mapping
  - sql
  - tools
tags:
  - binary-objects
  - data-mapping
description: Altova MapForce, nagradzane narzędzie do mapowania danych, oferuje funkcje umożliwiające łatwe mapowanie danych binarnych do i z popularnych baz danych relacyjnych.
---
Status: #blog

Tags:  #binary-objects #data-mapping

Categories: [data-integration](/blog/pl/category/data-integration.md) | [database + sql](/blog/pl/category/database-sql.md) 
# Mapowanie danych dla obiektów binarnych

Obiekty binarne są trudne do zarządzania w bazach danych. Są duże, ich zawartość nie jest czytelna dla człowieka, a mogą zawierać bajty danych, które łatwo można błędnie zinterpretować jako znaki sterujące. Nawet nazwa typu danych dla dużych obiektów binarnych – BLOB – odzwierciedla niechęć większości systemów zarządzania bazami danych wobec tych obiektów. Przed wprowadzeniem baz danych relacyjnych, definicja obiektu BLOB brzmiała: „coś nieokreślonego lub bezkształtnego”

Altova MapForce, wielokrotnie nagradzane narzędzie [Narzędzie do wizualizacji danych, umożliwiające konwersję i integrację danych w dowolnym formacie](https://www.altova.com/pl/mapforce), Zawiera funkcje umożliwiające łatwe mapowanie danych binarnych do lub z popularnych baz danych relacyjnych. Można mapować różne rodzaje danych, takie jak obrazy, pliki PDF, pliki wideo lub inne dane binarne. Przyjrzyjmy się przykładowi.

![](/blog/images/blob-insertion.png)

<!--more-->

MapForce zawiera dwie wbudowane funkcje: "read-binary-file" (odczyt pliku binarnego) i "write-binary-file" (zapis pliku binarnego), które służą do mapowania między obiektami binarnymi a bazami danych. W tym artykule rozbudujemy przykład funkcji "read-binary-file" z dokumentacji online MapForce, aby stworzyć kompletne mapowanie, które umożliwi wstawianie różnych obiektów binarnych do bazy danych relacyjnej.

Oto przykład z sekcji pomocy, który ilustruje sposób wstawiania obrazu do bazy danych:

[![Przykład mapowania plików binarnych w systemie pomocy online](/blog/images/help-ex-1.png)](help-ex-1.png)

To odwzorowanie umieszcza lokalny plik o nazwie image01.png w tabeli bazy danych. Możemy zauważyć, że baza danych jest zorganizowana w taki sposób, że zawiera metadane dotyczące obrazu w oddzielnych kolumnach, co umożliwia wyszukiwanie i odzyskiwanie tego samego obrazu. Nie chcemy umieszczać dużych plików binarnych w bazie danych bez możliwości ich późniejszego odnalezienia!

W naszym przypadku stworzymy bazę danych SQLite, która będzie służyła do śledzenia różnych plików binarnych, stanowiących zasoby wspierające wiele produktów dla działu marketingu. Dane binarne mogą obejmować pliki graficzne z logo, pliki PDF zawierające specyfikacje produktów, zrzuty ekranu prezentujące produkt w działaniu, zdjęcia, pliki wideo itp.

Zacznijmy od prostego pliku tekstowego w formacie CSV, który będzie opisywał informacje, które chcemy wprowadzić:

[![Model CSV do przesyłania danych do bazy danych](/blog/images/csv-model.png)](csv-model.png)

Kiedy ukończymy ten projekt, użytkownicy mogą mieć w bazie danych dziesiątki, a nawet setki zasobów. Kiedy będziemy chcieli pobrać jakiś zasób w przyszłości, nazwy typów zasobów będą kluczowymi metadanymi do wyszukiwania. Jednak jeśli któraś z nazw typów zasobów będzie błędna lub niespójna, duży obiekt binarny stanie się "sierotą" i nie będzie można go odzyskać.

Możemy zdefiniować listę typów zasobów, importując plik CSV do programu XMLSpy i generując schemat XML, w którym element "Type" jest wybierany z predefiniowanej listy. Następnie, nawet osoba bez doświadczenia, np. stażysta działu marketingu, może utworzyć listę zasobów [Widok siatki w XMLSpy](https://www.altova.com/pl/xmlspy-xml-editor). Pole "Typ" jest obowiązkowe:

[![Model przesyłania danych z bazy do widoku tabelarycznego w programie XMLSpy.](/blog/images/grid-view-1.png)](grid-view-1.png)

Możemy również dodać listę nazw produktów do schematu XML, lub przynajmniej wymagać obecności elementu "Produkt". Możemy nawet ustawić typ elementu "Zasób" na xs:anyURI, co wymusza odniesienie do pliku. Poniżej znajduje się okno pomocnicze "Szczegóły" w widoku schematu XMLSpy, pokazujące ustawienie typu danych dla elementu "Zasób":

[![Definicja typu XMLSchema dla elementu "Asset" w modelu przesyłania danych](/blog/images/asset-details.png)](asset-details.png)

Mapowanie obiektów binarnych w programie MapForce jest zasadniczo identyczne, niezależnie od tego, czy mapujemy dane z pliku CSV, czy z pliku XML.

Zaczniemy od otwarcia nowego projektu MapForce, w którym zdefiniujemy mapowanie danych, a następnie dodamy listę zasobów oraz tabelę bazy danych.

[![Mapowanie danych między obiektami binarnymi, listą obiektów źródłowych i tabelą w bazie danych](/blog/images/map1.png)](map1.png)

Użyliśmy programu DatabaseSpy, aby [utworzyć nową tabelę w bazie danych SQLite](https://www.altova.com/pl/databasespy), wprowadzając pewne ulepszenia w stosunku do przykładu zawartego w dokumentacji MapForce. Kolumna "product" będzie przechowywać nazwę produktu, a typ zasobu zostanie umieszczony w kolumnie "description". Kolumna "recordDate" będzie śledzić datę utworzenia każdego pliku binarnego.

Teraz ustawimy kolumnę "id" tak, aby automatycznie generowała numery, zgodnie z opisem w dokumentacji MapForce, a następnie narysujemy proste połączenia między źródłem a celem

[![Proste powiązania mapujące między listą obiektów źródłowych a tabelą w bazie danych](/blog/images/map2.png)](map2.png)

Produkty i typy z mapy źródłowej są bezpośrednio przypisywane do kolumn w bazie danych. Mapowanie elementu "wiersz" instruuje system, aby dla każdego wiersza danych wejściowych tworzył nowy rekord w bazie danych.

Teraz zmapujemy dane binarne na obiekty BLOB w bazie danych:

[![Mapowanie obiektów binarnych na obiekty BLOB w bazie danych](/blog/images/map3.png)](map3.png)

Wbudowana funkcja MapForce o nazwie "read-binary-file" wykorzystuje nazwę pliku podaną w elemencie "Asset" źródła, aby utworzyć obiekt BLOB. Funkcja "read-binary-file" zawsze traktuje dane źródłowe jako dane w formacie base64binary, niezależnie od jakichkolwiek konwencji opartych na nazwie pliku źródłowego.

Aby zakończyć proces mapowania, potrzebujemy połączeń, które pozwolą na wyodrębnienie nazwy pliku z zasobu oraz zapisanie daty przechowywania

[![Pełny przykład mapowania danych dla obiektów binarnych](/blog/images/map4.png)](map4.png)

Funkcja "usuń folder" automatycznie wyodrębnia nazwę pliku z dowolnej ścieżki, niezależnie od tego, czy dotyczy ona plików lokalnych, plików sieciowych, czy plików dostępnych w Internecie.

Funkcja "now" rejestruje datę i godzinę wykonania operacji, ale my potrzebujemy tylko daty, dlatego użyliśmy funkcji "substring-before", aby usunąć informację o godzinie.

Przycisk "Wygeneruj" znajdujący się na dole panelu mapowania uruchamia proces mapowania i generuje skrypt SQL:

[![Skrypt SQL wygenerowany do mapowania danych obiektów binarnych](/blog/images/sql-script.png)](sql-script.png)

Ten skrypt służy jedynie do podglądu wyników uzyskanych do tej pory. Wybór odpowiedniej opcji w głównym menu "Wyjście" uruchamia skrypt

[![Opcja menu umożliwiająca wykonanie skryptu SQL do mapowania danych obiektów binarnych](/blog/images/output-menu.png)](output-menu.png)

Wynik działania skryptu jest wyświetlany:

[![Wynik działania skryptu SQL po pomyślnym zmapowaniu danych obiektów binarnych](/blog/images/script-result.png)](script-result.png)

Klikniemy przycisk "Zapytanie do bazy danych", aby połączyć się z bazą danych i następnie zweryfikować wynik bezpośrednio w programie MapForce:

[![Okno zapytań do bazy danych MapForce służące do weryfikacji mapowania danych i obiektów binarnych](/blog/images/db-query.png)](db-query.png)

Nie można wiele wywnioskować, analizując dane w kolumnie "productfile" (która zawiera duże bloki danych), ale pozostałe kolumny zawierają przydatne metadane dotyczące każdego elementu.

W [dodatkowa wiadomość/komentarz (w odpowiedzi na wcześniejszą wypowiedź)](https://www.altova.com/blog/data-mapping-binary-objects-part-2/) Zaprezentujemy sposób mapowania danych, w tym obiektów binarnych [Wyodrębnij zasoby z bazy danych](https://www.altova.com/blog/data-mapping-binary-objects-part-2/) i zapisz je w ich oryginalnej formie. Jeśli nie możecie się powstrzymać, [Pobierz bezpłatną wersję próbną](https://www.altova.com/pl/download) w tym samouczki, pomoc i wiele przykładów, które pomogą rozpocząć własny projekt mapowania, konwersji i transformacji danych!
