Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 foreign ограничение на xml  [new]
Exproment
Member

Откуда:
Сообщений: 416
Добрый день, коллеги.

Есть некоторая типизированная xml которая хранит в себе скажем студентов. Эта информация обрабатывается в несколько шагов. И на некотором шаге(допустим 2-ом), есть необходимость для каждого студента указать дерево преподователей, т.е. необходимо указать ID-ки из таблицы [dbo].[Преподователи].

Затем данная xml-ка еще несколько шагов обрабатывается и её по сути можно удалить. ну так вот, есть некоторая вероятность, что одного из указанных преподователей удалят из ситемы(уволился человек, чтож поделать).

Потому хотелось-бы как-нибудь навесить foreign ограничение от xml-ки к преподователям.
На данный момент вижу две, так сказать концепции:

1) Что-нибудь сотворить с xsd схемой, но насколько я понимаю sql server такую возможность не поддерживает. Я прав ?
2) Создать табличку (ID преподователя, GUID), в которой GUID указывает на место в xml, где должен быть данный преподаватель. И уже от этой таблички делать ограничение. Но тут тоже хотелось бы на уровне базы гарантировать, что такой GUID есть в xml есть. Метода сделать это так-же не нашел.

Посему вопрос - решаема ли задача на engine ? На самом деле вариант с GUID'ами можно выполнить и на уровне процедур, однако интересно, есть ли такая возможность впринципе.
28 май 13, 23:22    [14362165]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Микроскоп и гвозди?

MSSQL это не XML DB это RDBS.
Не нужно хранить данные в XML, нужно хранить данные в таблицах. Если вам надо эти данные куда-то выкинуть в виде XML, то пишется запрос на выдачу данные в даном формате.

Если вы предоставляете данные целиком куда-то, а потом получаете изменённые, то вам вообще БД никакого типа не нужна.
Если вы изменяете данные командами - то меняйте прямо в таблицах.

Если вы говорите про закачку данных из XML. То нет тут никаких шагов по каждому элементу XML.
Заливается этот файл сразу в таблицы через XMLBulkLoad (используя XSD с MSSQL заметками).
Если данные нужно синхронить или схемы не сходятся - то заливается в промежуточные таблы, а далее обычная реляционная синхронизация.

Если вы про проблему синхронизации - связывания данных, то XML тут не причём савсем.

PS: Разруха не в клозетах, разруха – в головах. © Преображенский
29 май 13, 02:31    [14362431]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
Exproment
Member

Откуда:
Сообщений: 416
Mnior, так и знал что сейчас начнется тема "отказаться от xml". Понятное дело что всегда можно без него. Однако в данном случае xml по сути представляет некоторые наборы разной ширины, т.е. даже в селектах из него приходится использовать динамику дабы получать разное число столбцов.

Понятное дело что можно тоже самое сделать и без xml - т.е. необходимо сделать несколько таблиц для каждого типа значений - скажем numeric, varchar и т.д. затем табличку (ID чего-то, значение ID). И это только для того чтобы сохранять Value параметров. Однако, когда приходят эти данные, еще не известно в какую табличку они пойдут, т.е. не известен их тип, пока пользователь не укажет что это. Т.е. нужна еще одна табличка (Value ID, varchar), в которую параметры записываются изначально, до совершения маппинга. Хранить их в стандартном широком наборе невозможно.

А самое крутое что завершив такую архитектуру мы получим тоже самое(с небольшими отступлениями), что делает sql server для индексированного столбца xml. И тогда зачем что-то делать руками, если можно это возложить на sql server ?
29 май 13, 10:01    [14363012]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
baracs
Member

Откуда: Москва
Сообщений: 7204
Exproment
ну так вот, есть некоторая вероятность, что одного из указанных преподователей удалят из ситемы(уволился человек, чтож поделать).
Прстите за уход от темы, но в нормальных системах так не делают. Уволившихся помечают, присвоив соответствующий статус или еще как, но не удаляют.
29 май 13, 10:12    [14363078]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
baracs
Уволившихся помечают, присвоив соответствующий статус или еще как, но не удаляют.
Бх, мелочь, ему надо основное понять. У человека вон руки чешутся что-то понаписать, перпетуум мобиле, и при этом народ этим поотвлекать, прося о помощи.

Exproment
Однако в данном случае xml по сути представляет некоторые наборы разной ширины, т.е. даже в селектах из него приходится использовать динамику дабы получать разное число столбцов.
Зачем?!
Интерфейс и среда SQL предназначена для оптимального предоставление данных в статическом виде.
Т.е. он заточен на выдаче данных, а не на разнообразии предоставлении одного и того же в разной форме.

Если вам надо играться с рюшечками, то вам не в этом форуме и не на этом языке.
Exproment
необходимо сделать несколько таблиц для каждого типа значений - скажем numeric, varchar и т.д. затем табличку (ID чего-то, значение ID)
Ну и бредятина. Зачем разделять?! Зачем построчно?!
SQL не для этого - он узко специализирован.
А разные типы можно хранить и в одной колонке - но это тут не причём.
Exproment
Однако, когда приходят эти данные, еще не известно в какую табличку они пойдут, т.е. не известен их тип, пока пользователь не укажет что это.
Это означает что вы проблему не решили, а просто переместили её.
Данные не должны быть "неизвестно какие".
Даже XML жёстко структуирован и статичен. Иначе это не XML.
Exproment
до совершения маппинга.
Вот вы где-то там делайте "мапинг", а в скуле храните данные, а не мусор.
Exproment
Хранить их в стандартном широком наборе невозможно.
То что вы недогоняете как, это не значит что "невозможно".
Exproment
А самое крутое что завершив такую архитектуру мы получим тоже самое(с небольшими отступлениями), что делает sql server для индексированного столбца xml.
Потому что не то вы делаете и не там. Поверьте, вы не 10 и не 100 с такими "идеями" и "не структуированными" задачами.
Exproment
И тогда зачем что-то делать руками, если можно это возложить на sql server ?
XML было сделано, как временное промежуточное использование, в остальном это возня в песочнице.
Повторяю в сотый раз - используйте соответсвующие средства. На SQL свет клином не сошёлся.

Exproment, не надо упираться "хочу через ж, и всё тут". Это вы как-то сам себе в интимной обстановке, а остальных оградите от этого извращенства. Итак тяжело бегать за детьми над пропастью ... ;)
Заранее спасибо.

А топик предлагаю или закрыть или пусть человек докажет что у него наконец нашлась задачка которая не структуируется.
Опишите первоначальную задачу.
29 май 13, 10:51    [14363378]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Exproment
есть необходимость для каждого студента указать дерево преподователей преподАвателей

Так и представил себе яблоню, на ветвях которой сидят преподаватели Ничего другого представить не смог, т.к. не помню, чтобы у нас в университете были подобные "деревья".

Что за дерево такое? Можете описать? Чем не подходят стандартные SQL-методы обработки деревьев?
29 май 13, 11:14    [14363546]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
Exproment
Member

Откуда:
Сообщений: 416
Гость333, да ладно, лучший бред в качестве тестового примера просто не пришел в голову :)

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

Единственное что меня удивляет - ваша упертость в плане 'структурирования данных' и узкой специализации ms sql. Я не вижу этой узости :) Ибо думаю не просто так добавляли поддержку xml индексов. И поддержка нестрогой типизации в XSD со стороны MS SQL тоже как-то не дает с вами согласится.
29 май 13, 11:56    [14363826]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Exproment
Единственное что меня удивляет - ваша упертость в плане 'структурирования данных' и узкой специализации ms sql.
Это личное. Постоянный поток людей с выключенной головой.
Exproment
Я не вижу этой узости :)
Не видят только слепые.
Exproment
Ибо думаю не просто так добавляли поддержку xml индексов.
И что?
Их что добавили ради таких извращений?

В любой системе помимо N типичных инструментов на которые заточена система (модель/мировозрение), есть N^2 ещё больше инструментов, не типичных и не подходящих. Для того чтобы можно было привести весь бардак и всё несоответствие к первым, типичным N.
XML в скуле и индексация как раз к этим и относится. Т.е. работает - но это нетипично и не может быть эффективно.
Да, с каждой версией они добавляют разнообразие индексов. Но не как для основы системы.

Вариантов хранение данных размазано от полного бесконтрольного содержания (VarBinary, FILESTREAM), через контроль валидности и плавающая структурность, то полного контроля в жёсткой форме (реляционность).

Когда проектируют систему, порой нет смысл/времени и информации врезать всё в граните жёсткой форме, ибо неизвестно, а нужно ли это потом отбирать и контролировать.
Если оказалось нужно - то происходит одноразовый переход из слабой структурности в жёсткую, с механизмом вычищения мусора. Т.е. данные переносятся из XML в реляционку.

Exproment
И поддержка нестрогой типизации в XSD со стороны MS SQL тоже как-то не дает с вами согласится.
Мимо. Целостность данных тут не причём.
Вы сенсорик чтоле. Понимать надо смысл, а не чувствовать какие-то там оттенки слов.

Вы чёрным по белому написали:
автор
2) Создать табличку (ID преподователя, GUID), в которой GUID указывает на место в xml, где должен быть данный преподаватель. Но тут тоже хотелось бы на уровне базы гарантировать, что такой GUID есть в xml есть
Т.е. вы хотите иметь жёсткие ограничения в неструктурном (слабоструктурном) месте. Т.е засунуть реляционку в мусор.
Очевидный бред.

Или мусор в мусорной корзине или нужные вещи по полочкам.
29 май 13, 15:53    [14365415]     Ответить | Цитировать Сообщить модератору
 Re: foreign ограничение на xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
PS: Мой так называемый "безаппеляционный тон" никоем образом ничего на запрещает и не навязывает.
Дуло пистолета магическим образом перед вами не возникает. И кнопочка ответить (возразить аргументом) не исчезает.
Поверьте.
И более того, это не значит что выраженное мнение маё или "не ваше" или "против вас".

Точно и правильно выразиться всегда очень сложно, всем.
29 май 13, 16:18    [14365599]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить