doc/IT/programming/SQL/ORM/example.md
2026-06-11 16:05:27 +03:00

8.2 KiB
Raw Blame History

prompt

Скорректируй мысль: Формы представлений данных 1 Реляционное хранение данных: Контейнер данных: база данных набор табличек Описание данных: ER диаграммы и т.п. Язык запросов: SQL

2 RDF (Linked Data) Контейнер данных: triple store (quad store) в разной сериализации начиная с turtle Описание данных: RDF(S), OWL Язык запросов: SPARQL

Покажи, как к каждой применим ORM и для чего. Для Linked Data например LDkit

1

Формы представления данных

1. Реляционное хранение данных

Контейнер данных: база данных — набор взаимосвязанных таблиц (реляций), где каждая таблица представляет сущность, а строки и столбцы задают экземпляры и атрибуты сущности соответственно.

Описание данных:

  • ERдиаграммы (EntityRelationship) — для визуализации структуры базы данных, связей между таблицами и ограничений;
  • UMLдиаграммы классов — альтернативный способ моделирования структуры данных;
  • схемы баз данных (Data Schema) — формальное описание таблиц, столбцов, типов данных, ключей и ограничений (первичных, внешних и т. д.);
  • DDLскрипты (Data Definition Language) — SQLкоманды CREATE TABLE, ALTER TABLE и т. п. для создания и изменения структуры БД.

Язык запросов: SQL (Structured Query Language) — стандартный язык для работы с реляционными БД: выборки (SELECT), вставки (INSERT), обновления (UPDATE), удаления (DELETE) данных, а также управления транзакциями и доступом.

Применение ORM (ObjectRelational Mapping):

ORM служит мостом между объектно‑ориентированным кодом приложения и реляционной базой данных. Он позволяет:

  • представлять таблицы БД как классы, строки — как объекты этих классов, столбцы — как свойства объектов;
  • автоматически генерировать SQLзапросы на основе вызовов методов объектов (например, user.save()INSERT INTO users ...);
  • абстрагироваться от особенностей разных СУБД (MySQL, PostgreSQL, SQLite и т. д.) — код остаётся почти неизменным;
  • работать с данными в терминах ООП, а не SQL.

Примеры ORM:

  • для Python: SQLAlchemy, Django ORM;
  • для Java: Hibernate, JPA;
  • для .NET: Entity Framework;
  • для JavaScript/Node.js: Sequelize, TypeORM.

2. RDF (Linked Data)

Контейнер данных: хранилище триплетов (triple store) или квадруплетов (quad store). Данные хранятся в виде троек «субъект‑предикат‑объект» (SubjectPredicateObject), например:

<http://example.org/Alice> <http://xmlns.com/foaf/0.1/name> "Alice".

Сериализации: Turtle, NTriples, JSONLD, RDF/XML и др.

Описание данных:

  • RDF(S) (Resource Description Framework Schema) — определяет классы, свойства, иерархию классов и домены/диапазоны свойств;
  • OWL (Web Ontology Language) — более мощный язык для описания онтологий: сложных классов, ограничений, эквивалентностей, правил вывода и т. д.;
  • SHACL (Shapes Constraint Language) — язык для описания и валидации структуры RDFданных (аналог схем для XML или JSON).

Язык запросов: SPARQL — язык запросов к RDFданным. Позволяет выполнять сложные выборки, объединения, агрегации, обновления и даже создание новых триплетов на основе шаблонов.

Применение инструментов, аналогичных ORM (для Linked Data):

Прямого аналога классического ORM для RDF нет, так как модель данных принципиально иная. Однако существуют библиотеки и фреймворки, выполняющие схожие задачи — абстрагируют работу с RDF и SPARQL, позволяя оперировать объектами и классами.

LDkit — один из таких инструментов для JavaScript/TypeScript:

  • Для чего нужен: упрощает создание и работу с Linked Data приложениями. Позволяет:
    • определить схему данных (на основе RDFS/OWL) в коде;
    • автоматически генерировать SPARQLзапросы для выборки и обновления данных по шаблонам;
    • валидировать данные на соответствие схеме;
    • сериализовать объекты приложения в RDF и десериализовать RDF в объекты;
    • работать с разными хранилищами (triple stores) через единый интерфейс.
  • Как применяется: разработчик определяет классы TypeScript, аннотированные RDFсвойствами. LDkit использует эти определения для построения SPARQLзапросов и преобразования результатов в объекты TypeScript. Это даёт знакомый ООП‑подход при работе с RDF.

Другие инструменты:

  • RDF4J (Java) — фреймворк для работы с RDF, включающий API для манипулирования данными, SPARQLпроцессор и поддержку хранилищ. Позволяет создавать «обёртки» над RDFданными.
  • rdflib (Python) — библиотека для парсинга, сериализации и выполнения SPARQLзапросов. Можно построить собственный слой абстракции поверх неё.
  • Apache Jena (Java) — мощный фреймворк со множеством возможностей, включая поддержку Reasoning (вывода новых фактов) и удобные API для работы с моделями данных.

Краткий итог

Параметр Реляционные БД RDF / Linked Data
Контейнер База данных (таблицы) Triple/Quad Store
Описание ERдиаграммы, схемы, DDL RDFS, OWL, SHACL
Язык запросов SQL SPARQL
Абстракция (аналог ORM) ORM (SQLAlchemy, Hibernate и т. д.) Фреймворки (LDkit, RDF4J, Jena)
Цель абстракции Сопоставление таблиц с классами, генерация SQL Сопоставление RDFтриплетов с объектами, генерация SPARQL

Хотите, я раскрою какой‑либо из пунктов подробнее?