Перечень статей   Терминология   Choose language


Вставка XML-дерева без insert (следуя FKs)


Перемежаемость кода и данных во входном потоке

Код и данные могут перемежаться: если выражение начинается

Действия при появлении данных

Получив входные данные, СУБД выполняет следующие действия:

Как xml-дерево записывается в базу данных

Успешность записи xml-деревьев в базу данных зависит от того, соответствует ли схема базы вводимому дереву (при несоответствии некоторые xml-под-деревья игнорируются).

Если вложенная таблица двумя своими полями ссылается на две разные записи обрамляющей таблицы, то в открывающем теге вложенной таблицы после ее названия через знак слэш "/" нужно указать название соответствующего поля обрамляющей таблицы.

Если обрамляющая таблица двумя своими полями ссылается на две разные записи вложенной таблицы, то в открывающем теге обрамляющей таблицы после ее названия через знак слэш "/" нужно указать название соответствующего поля вложенной таблицы.

Таким образом таблица и ее ссылающееся поле указываются через слэш в одном открывающем теге. Такое указание поля в открывающем теге будем называть детерминацией, determination (в браузере она тоже предусмотрена). Различные варианты детерминации рассмотрены в отдельном документе. В примерах ниже предполагается, что все первичные ключи снабжены последовательностями, значения из которых вводятся в эти ключи по умолчанию.

ввод в СУБД DDL введено
<formdata>
  <a        data=12.3>
    <b      data=23.4>
    <b      data=34.5>
    <b      data=45.6>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  data float
);
create table b (
  id   num      primary key,
  ref  num      references a(id),
  data float
);
insert into formdata values (1);
insert into a        values (10,   1, 12.3);
insert into b        values (101, 10, 23.4);
insert into b        values (102, 10, 34.5);
insert into b        values (103, 10, 45.6);

-- секция "b" является множеством
<formdata>
  <a        data=12.3>
    <b      data=23.4>
    <b      data=34.5>
    <b      data=45.6>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  data float
);
create table b (
  id   num      primary key,
  ref1 num      references a(id),
  ref2 num      references a(id),
  data float
);
insert into formdata values (1);
insert into a        values (10,   1, 12.3);

<formdata>
  <a        data=12.3>
    <b/ref1 data=23.4>
    <b/ref1 data=34.5>
    <b/ref1 data=45.6>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  data float
);
create table b (
  id   num      primary key,
  ref1 num      references a(id),
  ref2 num      references a(id),
  data float
);
insert into formdata values (1);
insert into a        values (10,   1,       12.3);
insert into b        values (101, 10, null, 23.4);
insert into b        values (102, 10, null, 34.5);
insert into b        values (103, 10, null, 45.6);


<formdata>
  <a        data=12.3>
    <b      data=23.4>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  ref  num      references b(id),
  data float
);
create table b (
  id   num      primary key,
  data float
);
insert into formdata values (1);
insert into a        values (10,  1, 100, 12.3);
insert into b        values (100,         23.4);

-- секция "b" является эстафетой
<formdata>
  <a        data=12.3>
    <b      data=23.4>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  ref1 num      references b(id),
  ref2 num      references b(id),
  data float
);
create table b (
  id   num      primary key,
  data float
);
insert into formdata values (1);
insert into a        values (10,  1, null, null, 12.3);

<formdata>
  <a/ref1  data=12.3>
    <b     data=23.4>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  ref1 num      references b(id),
  ref2 num      references b(id),
  data float
);
create table b (
  id   num      primary key,
  data float
);
insert into formdata values (1);
insert into a        values (10,  1, 100, null, 12.3);
insert into b        values (100,               23.4);
<formdata>
  <a        data=12.3>
    <b      data=23.4>
    <b      data=34.5>
    <b      data=45.6>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  ref  num      references b(id),
  data float
);
create table b (
  id   num      primary key,
  data float
);
insert into formdata values (1);
insert into a        values (10, 1, null, 12.3);

-- секция "b" не введена (все теги вместе!),
-- т.к. схема базы не содержит
-- ни множества, ни списка для нее


<formdata>
  <a        data=12.3>
    <b      data=23.4>
    <b      data=34.5>
    <b      data=45.6>
  </a>
</formdata>
create table a (
  id   num      primary key,
  srv  num      references formdata,
  ref  num      references b(id),
  data float
);
create table b (
  id   num      primary key,
  ref  num      references b(id),
  data float
);
insert into formdata values (1);
insert into a        values (10,  1, 101, 12.3);
insert into b        values (101,    102, 23.4);
insert into b        values (102,    103, 34.5);
insert into b        values (103,   null, 45.6);

-- секция "b" является списком


Тюрин Дмитрий



Перечень статей   Терминология   Choose language


Сайт управляется системой uCoz