Объяснение о Direct Mapping для преобразования отношения «многие ко многим» - PullRequest
0 голосов
/ 07 мая 2018

Одним из стандартов W3C для RDB2RDF является Прямое сопоставление . Я слышал , что существует проблема при преобразовании отношений «многие ко многим» из реляционной базы данных, и они говорят, что они теряют семантику, мне нужно больше объяснений по этому поводу.

1 Ответ

0 голосов
/ 07 мая 2018

... существует проблема при преобразовании отношения «многие ко многим» из реляционной базы данных

Я бы сказал, что прямое отображение вводит дополнительную "паразитную" семантику, рассматривая артефакты нормализации как первоклассный объект.

Рассмотрим тестовый пример D011-M2MRelations .

Student
+---------+-----------+----------+
| ID (PK) | FirstName | LastName |
+---------+-----------+----------+
| 10      | Venus     | Williams |
| 11      | Fernando  | Alonso   |
| 12      | David     | Villa    |
+---------+-----------+----------+

Student_Sport
+------------+----------+
| ID_Student | ID_Sport |
+------------+----------+
| 10         | 110      |
| 11         | 111      |
| 11         | 112      |
| 12         | 111      |
+------------+----------+

Sport
+---------+-------------+
| ID (PK) | Description |
+---------+-------------+
| 110     | Tennis      |
| 111     | Football    |
| 112     | Formula1    |
+---------+-------------+

Прямое отображение генерирует много троек такого рода:

<Student_Sport/ID_Student=11;ID_Sport=111> <Student_Sport#ref-ID_Student> <Student/ID=11>.
<Student_Sport/ID_Student=11;ID_Sport=111> <Student_Sport#ref-ID_Sport>  <Sport/ID=111>.
<Student_Sport/ID_Student=11;ID_Sport=112> <Student_Sport#ref-ID_Student> <Student/ID=11>.
<Student_Sport/ID_Student=11;ID_Sport=112> <Student_Sport#ref-ID_Sport>  <Sport/ID=112>.

Моделируя с нуля, вы, вероятно, напишите что-то вроде этого (R2RML позволяет добиться этого):

<http://example.com/student/11> <http://example.com/plays> <http://example.com/sport/111>.
<http://example.com/student/11> <http://example.com/plays> <http://example.com/sport/112>.

Более того, нельзя улучшить результаты, денормируя исходные таблицы или создавая представления SQL: без первичных ключей результаты, вероятно, будут даже хуже .

Чтобы улучшить результаты, последующие DELETE/INSERT (или CONSTRUCT) кажутся единственной доступной опцией. Процесс должен называться ELT, а не ETL. Возможно, следующие сгенерированные DM тройки были предназначены , чтобы помочь в таком преобразовании:

<Student_Sport/ID_Student=11;ID_Sport=111> <Student_Sport#ID_Student> "11"^^xsd:integer.
<Student_Sport/ID_Student=11;ID_Sport=111> <Student_Sport#ID_Sport>  "111"^^xsd:integer.
<Student_Sport/ID_Student=11;ID_Sport=112> <Student_Sport#ID_Student> "11"^^xsd:integer.
<Student_Sport/ID_Student=11;ID_Sport=112> <Student_Sport#ID_Sport>  "112"^^xsd:integer.

... говорят, что теряет семантику

@ JuanSequeda означает, что DM не генерирует онтологию OWL из реляционной схемы, это поведение не зависит от отношения «многие ко многим».


Смотрите также ссылки из Issue 14 .

...