Database metadata/pl: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: Database metadata/pl
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Metadane bazy danych to dane o bazie danych. W tym artykule omówimy również informacje o połączeniu do bazy danych oraz o serwerze i kliencie bazy danych. | |
| 2 | + | ||
| 3 | + | ## SQLDB | |
| 4 | + | ||
| 5 | + | ### Informacje o serwerze i kliencie | |
| 6 | + | ||
| 7 | + | W wersjach rozwojowych FPC z listopada 2012 r. można użyć funkcji „GetConnectionInfo”. Zobacz [dokumentację GetConnectionInfo](http://www.freepascal.org/docs-html/fcl/sqldb/tsqlconnection.getconnectioninfo.html) Wyjaśnienie: | |
| 8 | + | ||
| 9 | + | - *citServerVersion*: wersja serwera jest zwracana w postaci ciągu sformatowanego jako liczba (np. 0205 reprezentuje 2.5) | |
| 10 | + | ||
| 11 | + | jeśli T*Connection, o którym mowa, tego (tej części) nie obsługuje, to funkcje zwrócą puste wartości. | |
| 12 | + | ||
| 13 | + | #### Specyfika Firebird/Interbase | |
| 14 | + | ||
| 15 | + | - *citServerVersion* zwraca liczby starsze (major) i młodsze (minor) tylko dla Firebirda (np. 0205 dla wersji 2.5.1); zwraca 3 liczby dla Interbase | |
| 16 | + | - *citClientVersion* nie jest obsługiwany i prawdopodobnie nigdy nie będzie obsługiwany przez Firebird w systemie Linux/*Nix ze względu na brakującą funkcjonalność | |
| 17 | + | ||
| 18 | + | Oprócz powyższych funkcji, od grudnia 2012 r. złącze Firebird udostępnia funkcję *GetODS*, która pokazuje starszą (major) wersję ODS bazy danych, z którą jesteś połączony. Ta wersja ODS określa, jakie funkcje są dostępne do użycia – ponieważ możesz m.in. użyć bazy danych utworzonej za pomocą Firebird 2.1 z serwerem Firebird 2.5, ale funkcje będą ograniczone do funkcjonalności 2.1. | |
| 19 | + | ||
| 20 | + | ### Informacje o schemacie | |
| 21 | + | ||
| 22 | + | Schemat znany jest również jako język DDL bazy danych (Data Definition Language). Schemat jest reprezentacją tabel, widoków, procedur i innych obiektów, które tworzą bazę danych. | |
| 23 | + | ||
| 24 | + | Zobacz [dokumentacja pobierania informacji o schemacie](http://www.freepascal.org/docs-html/fcl/sqldb/retrievingschemainformation.html) | |
| 25 | + | ||
| 26 | + | *GetSchemaInfoSQL* nie jest zaimplementowany w równym stopniu dla każdego połączenia; połączenie do Firebird ma obecnie większość zaimplementowanych funkcjonalności; pozostałe (np. MS SQL, Sybase, Oracle) mają mniejszą funkcjonalność. Łatki są mile widziane. | |
| 27 | + | ||
| 28 | + | #### Propozycja rozszerzenia/ujednolicenia | |
| 29 | + | ||
| 30 | + | **Note: Na liście mailingowej FPC były dyskusje/propozycje jak ujednolicić i rozszerzyć pobieranie metadanych dla SQLDB. Proszę zaktualizować poniżej wszystkie wyniki tej dyskusji:** | |
| 31 | + | ||
| 32 | + | Zasugeruj zbieżność do standardowego nazewnictwa kolumn INFORMATION_SCHEMA SQL w istniejącym GetSchemaInfoSQL. Więc dla: | |
| 33 | + | ||
| 34 | + | - stTables używają INFORMATION_SCHEMA.TABLES z następującymi nazwami kolumn: | |
| 35 | + | ||
| 36 | + | ` TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE ('BASE TABLE', 'VIEW', 'GLOBAL TEMPORARY', 'LOCAL TEMPORARY'), ...` | |
| 37 | + | ||
| 38 | + | (dla baz, które nie implementują widoków INFORMATION_SCHEMA pozostaw zapytania do tabel systemowych, ale używaj w/w nazewnictwa kolumn) | |
| 39 | + | ||
| 40 | + | - stColumns używają INFORMATION_SCHEMA.COLUMNS z następującymi nazwami kolumn: | |
| 41 | + | ||
| 42 | + | ` TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, ..., CHARACTER_SET_NAME, COLLATION_NAME, DOMAIN_NAME, ..., IS_IDENTITY, IS_GENERATED` | |
| 43 | + | ||
| 44 | + | - stProcedures używają INFORMATION_SCHEMA.ROUTINES z następującymi nazwami kolumn: | |
| 45 | + | ||
| 46 | + | ` SPECIFIC_CATALOG, SPECIFIC_SCHEMA, SPECIFIC_NAME, ROUTINE_CATALOG, ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE ('PROCEDURE', 'FUNCTION',...), ...` | |
| 47 | + | ||
| 48 | + | Uwaga: Z drugiej strony Delphi używa nieco innego nazewnictwa kolumn, opisanego w [Struktura zbiorów danych metadanych](http://docwiki.embarcadero.com/RADStudio/XE3/en/The_Structure_of_Metadata_Datasets) Jednak testy ze sterownikami Delphi XE MySQL i Interbase DBX pokazują wyniki niezgodne z tą specyfikacją (np. dla stTables zwracane są takie kolumny: CatalogName, SchemaName, TableName, TableType (bez "_") i bez kolumny RECNO), a dla metody **ADO OpenSchema** zwracane są takie kolumny: | |
| 49 | + | ||
| 50 | + | `siTables (adSchemaTables): TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE(widestring)`\ | |
| 51 | + | `siColumns (adSchemaColumns): TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, COLUMN_DEFAULT, IS_NULLABLE, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE, ..., CHARACTER_SET_NAME, COLLATION_NAME, DOMAIN_NAME, ..., IS_COMPUTED`\ | |
| 52 | + | `siIndexes (adSchemaIndexes): TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, INDEX_CATALOG, INDEX_SCHEMA, INDEX_NAME, PRIMARY_KEY(boolean), UNIQUE(boolean), CLUSTERED(boolean), TYPE(word), FILL_FACTOR, ..., ORDINAL_POSITION, COLUMN_NAME, ... (jeden wiersz na każdą kolumnę w indeksie)`\ | |
| 53 | + | `siProcedures (adSchemaProcedures): PROCEDURE_CATALOG, PROCEDURE_SCHEMA, PROCEDURE_NAME, PROCEDURE_TYPE(Smallint), ...`\ | |
| 54 | + | `siSchemata (adSchemaSchemata): CATALOG_NAME, SCHEMA_NAME, SCHEMA_OWNER, ...` | |
| 55 | + | ||
| 56 | + | #### Narzędzie metadanych TSQLQuery w Lazarusie | |
| 57 | + | ||
| 58 | + | *GetSchemaInfoSQL* jest używany w Lazarusie w trybie projektowania, jeśli używasz Inspektora obiektów do edycji właściwości SQL *TSQLQuery*, w którym połączenie z bazą danych jest aktywne, to możesz nie tylko edytować tekst zapytania SQL w zakładce Kod SQL, ale także pobrać informacje w zakładce Metadane, wypełniając niektóre szczegóły i naciskając klawisz Play/Go: | |
| 59 | + | ||
| 60 | + | <figure> | |
| 61 | + | <img src="MetaDataEditor.png" title="MetaDataEditor.png" /> | |
| 62 | + | <figcaption>MetaDataEditor.png</figcaption> | |
| 63 | + | </figure> | |
| 64 | + | ||
| 65 | + | ### Informacje o schemacie słownika danych | |
| 66 | + | ||
| 67 | + | Istnieje oddzielny pakiet słownika danych FPC, który obsługuje informacje o schemacie. Ten pakiet jest używany w projekcie [[lazdatadesktop]] dostarczanym z Lazarusem. | |
| 68 | + | ||
| 69 | + | ## Informacje specyficzne dla bazy danych | |
| 70 | + | ||
| 71 | + | Wiele baz danych ma albo | |
| 72 | + | ||
| 73 | + | - tabele/widoki systemowe (z których można wybierać) lub | |
| 74 | + | - procedury składowane | |
| 75 | + | ||
| 76 | + | które pokazują informacje o obiektach bazy danych, wersji serwera itp. | |
| 77 | + | ||
| 78 | + | Przykładami są zmienne @@VERSION w serwerach MS SQL Server i Sybase. | |
| 79 | + | ||
| 80 | + | Jeśli twoja biblioteka połączeń z bazą danych nie obsługuje innych sposobów uzyskania tych informacji, możesz jej użyć (i przesłać prośbę o poprawkę/ulepszenie do odpowiedniego narzędzia do śledzenia błędów w celu włączenia do bazy danych SQL/Zeos itp.) | |
| 81 | + | ||
| 82 | + | ## Zobacz także | |
| 83 | + | ||
| 84 | + | - [[Working With TSQLQuery/pl|Praca z TSQLQuery]], gdzie znajdziesz więcej informacji o zapytaniach SQL | |
| 85 | + | ||
| 86 | + | --- | |
| 87 | + | *From the Free Pascal wiki, page "Database metadata/pl", as it stood on 2022-10-03 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 88 | + | Category: Databases | |
| 89 | + | Category: FPC | |
| 90 | + | Category: Lazarus |
