Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 52 53 54 55 56 [57] 58 59 60 61 .. 106   вперед  Ctrl
 Re: CACHE и MSSQL  [new]
мод
Guest
8|
квадратики - объекты, в них атрибуты. стрелочки - связи, между идентификаторами

Я об этом и говорил: есть только сущности, заданные своими атрибутами. Если тип значения атрибута - ссылка на другую сущность, то автоматически возникает связь между двумя этими сущностями. Пример я приводил. Попробуйте и у вас все получится.
30 ноя 06, 17:57    [3475190]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Ptn
Guest
Павел Воронцов
Э, да это моя любимая задача о компактной укладке рюкзака! Я её тут пару раз решал с помощью чистого SQL из чисто спортивного интереса пару лет назад. Решается она без курсоров, уверяю Вас. Запросы, правда, выглядят страшновато и работают не ахти как быстро и ограничения в приминении имеются, но решается. Ссылки могу поискать, только не сейчас. Как только мне такая задача попадётся в реале, я из чито спортивного интереса сделаю быстродействующее решение без курсоров, сейчас влом.


Вот выделенное и говорить о том что и какой кровью. IMXO. А решить можно ...да.
Проблемы начинаються когда у вас не рюкзак а матрешка из рюкзаков - причем последовательность матрешёк непостоянная.

PS: У нас такая задачка зовется "сопоставление" - как подумаю ёё решать бех прямой "навигации" так становится груууусто грууустно.
30 ноя 06, 19:04    [3475628]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2400
Блог
Пока ехал домой, что это даже не задача о рюкзаке, а гораааздо проще...
30 ноя 06, 19:08    [3475645]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
8|
Guest
мод
Попробуйте и у вас все получится.

при помощи связей мы можем соединить две, три, четыре, и даже пять объектов. во все стороны. достаточно поместить подходящую связь между. таким образом мы обеспечиваем нашим пользователям навигацию, соответствующую их семантическим фантазиям. ваши же пользователи ограничены и скудоумны.
30 ноя 06, 19:31    [3475717]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Vlad2005
Member

Откуда: Воронеж
Сообщений: 119
8|
мод
Попробуйте и у вас все получится.

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


"Имя сестра, имя!!!", пардон, парочку примеров из конкретной жизни - на примерах
внедренных программных комплексов - со скриншотами и текстами процедур или
иных программных модулей. В противном случае вы, сэр, даже не феномен...

Гы. Даж такое непотребство, как 1С позволяет нарашивать аналитику (именно ваши т.н.
связи) очень глубоко. И, безо всякого програмления, иметь отчеты.
30 ноя 06, 19:37    [3475734]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Rus000
Member

Откуда: Красноярск
Сообщений: 317
iscrafm

на эту тему можно почитать пространные размышления Дейта, например здесь


почитал размышления - сложновато для восприятия поздним вечером тем не менее несколько цитат имхо ключевых

автор
Реляционный язык баз данных RD должен быть разрешимым. Следовательно, он не должен быть вычислительно полным, и в нем не должна поддерживаться возможность вызова какой-либо процедуры, которую в принципе невозможно реализовать средствами RD.


автор
Я никогда не был убежден в том, что выделение доступа к данным в отдельный «подъязык» является хорошей идеей, [хотя] она присутствует в нашей практике в течение довольно долгого времени в форме встраиваемого SQL. Кстати, в связи с этим интересно заметить, что после добавления в стандарт SQL в 1996 г. механизма PSM («Persistent Stored Modules») сам SQL стал теперь вычислительно полным языком – что означает отсутствие дальнейшей потребности в основном языке (при использовании SQL).


имхо ключевая фраза

автор
Следует переформулировать ОО-предписание 3, чтобы сказать, что подъязык приложений языка D должен быть вычислительно полным и полностью процедурным, а подъязык баз данных языка D должен быть не вычислительно полным, должен быть полностью непроцедурным и должен быть разрешимым (хотя мне не очень понятно, как эти подъязыки могут взаимодействовать) … [Еще одна попытка, позже:] Разделите D на RD (реляционную, непроцедурную часть) и CD (вычислительную, процедурную часть). Тогда ОО-предписание 3 следует переформулировать так, чтобы сказать, что RD должен быть не вычислительно полным, и в нем не должна обеспечиваться возможность вызова какой-либо операции, которую невозможно реализовать средствами RD … Реляционный язык баз данных RD должен быть разрешимым. Следовательно, он не должен быть вычислительно полным, и в нем не должна поддерживаться возможность вызова какой-либо процедуры, которую в принципе невозможно реализовать средствами RD.


вывод: СУБД не может решать задачи обладая только непроцедурным языком. В нашем случае РСУБД это, видимо, SQL.

Имхо это позволяет взглянуть на многие аргументы в другом ракурсе, не правда ли?
30 ноя 06, 19:53    [3475772]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
8|
Guest
Vlad2005

никаких процедур не нужно, пользователь нажимает на стрелочку и все. навигация естественна.

ЗЫ Андрей Леонидович, я правильно говорю? 8)
30 ноя 06, 19:57    [3475779]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
Павел Воронцов
iscrafm
Павел, есть список А: товар, количество. Список В: товар, количество
Нужно для каждой записи из списка А подобрать записи из списка В...
Товар-1, требуется 100 шт.
В наличии
Товар-1, партия-1 - 30 шт
Товар-1, партия-2 - 20 шт
Товар-1, партия-3 - 80 шт
Требуется взять из каждой партии меньшее из остатка партии и остатка от требуемого.
Э, да это моя любимая задача о компактной укладке рюкзака! Я её тут пару раз решал с помощью чистого SQL из чисто спортивного интереса пару лет назад. Решается она без курсоров, уверяю Вас. Запросы, правда, выглядят страшновато и работают не ахти как быстро и ограничения в приминении имеются, но решается. Ссылки могу поискать, только не сейчас. Как только мне такая задача попадётся в реале, я из чито спортивного интереса сделаю быстродействующее решение без курсоров, сейчас влом.


Еще проще, на самом деле - это совсем просто, называется такая штука rolling remainer (накапливаемый остаток?). На Оракле это делаецца с помощью аналитических функций с пол-тычка, 1 запросом в 16 строчек который пишется за 5 минут, примерно вот так:

create table products 
(product_id number primary key, 
 qty_required  number(38));
 
 create table shipments 
(product_id number,
 shipment_id number, 
 shipment_qty number(38),
 constraint pk_shipment primary key(product_id, shipment_id)
 );
 
 insert into products (product_id, qty_required)
 values(1,100)
 ;

 insert into products (product_id, qty_required)
 values(2,0)
 ;
 
 insert into shipments (product_id, shipment_id, shipment_qty)
 values(1,1,30)
;

 insert into shipments (product_id, shipment_id, shipment_qty)
 values(1,2,20)
;

 insert into shipments (product_id, shipment_id, shipment_qty)
 values(1,3,80)
;

commit
;
 
 select p.product_id, 
        p.qty_required,
        s.shipment_id,
		s.shipment_qty,
        case when sum(s.shipment_qty) over (partition by s.product_id order by s.product_id, s.shipment_id) - p.qty_required <0
		     then sum(s.shipment_qty) over (partition by s.product_id order by s.product_id, s.shipment_id)
			 else p.qty_required
			 end  
		as rolling_qty,
        case when sum(s.shipment_qty) over (partition by s.product_id order by s.product_id, s.shipment_id) - p.qty_required <0 then 0 
			 else sum(s.shipment_qty) over (partition by s.product_id order by s.product_id, s.shipment_id) - p.qty_required
			 end  
			 as rolling_remainder
  from products p,
         shipments s
where p.product_id=s.product_id

Вот и все, какие проблемы-то с нафигацией? В упор не вижу никаких проблем, если знать SQL.
30 ноя 06, 20:08    [3475793]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Ptn
Guest
А теперь эти 100 штук возращаются на склад.... ибо не кондиция

PS: Автор вроде и не говорил что такое нельзя решить на SQL
30 ноя 06, 20:27    [3475840]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
Ptn
А теперь эти 100 штук возращаются на склад.... ибо не кондиция

PS: Автор вроде и не говорил что такое нельзя решить на SQL

Это вообще элементарно - 3 строчки. При условии что некондиция и возвраты хранятся отдельно от кондиционных деталей. Можно возвращать обратно в ту партию из которой взяли, просто надо учитывать из какой партии сколько деталей взяли. Что опять-таки элементарно. Я бы так делать не стал, потому что хранить некондицию в одной куче с потенциально кондиционными деталями глупо.

Данная задача была приведена как пример в доказательство утверждения что "навигация" в реляционных СУБД с языком SQL представляет какую-то серьезную проблему. Я утверждаю что никакой "проблемы" здесь нет, указанная задача легко и непринужденно решается с помощью SQL. Естественно что если мы станем усложненять постановку задачи то и SQL тоже будет усложняться. При усложнении постановки задачи усложняется любой код на любом языке. Такова наша программерская жисть :)
30 ноя 06, 20:45    [3475880]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
iscrafm
Member [заблокирован]

Откуда:
Сообщений: 35345
Зл0й

К чему столько текста? Как накапливаемый остаток без курсоро посчитать известно. Вы внутрь своего селекта, приведенного так изящно, вставьте логику какую-нибудь. Хотя-бы простейшую. И в случае если нет нужного количества - запишите исключение в таблицу дефицита.
30 ноя 06, 21:54    [3475994]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
iscrafm
Member [заблокирован]

Откуда:
Сообщений: 35345
Зл0й
Данная задача была приведена как пример в доказательство утверждения что "навигация" в реляционных СУБД с языком SQL представляет какую-то серьезную проблему. Я утверждаю что никакой "проблемы" здесь нет, указанная задача легко и непринужденно решается с помощью SQL.

Данная задача была приведена в пример необходимости использования навигационных методов доступа к данным.
30 ноя 06, 21:57    [3476001]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
iscrafm
Зл0й

К чему столько текста? Как накапливаемый остаток без курсоро посчитать известно. Вы внутрь своего селекта, приведенного так изящно, вставьте логику какую-нибудь. Хотя-бы простейшую. И в случае если нет нужного количества - запишите исключение в таблицу дефицита.

В оракле я могу в него вставить любую логику в духе
if-then-else
, что и было сделано в данном случае с помощью оператора
case ... when ... then .. else ... end.
В принципе я могу вызвать любую доступную в PL/SQL функцию, в том числе и мною написанную прямо там же, где case ... when. Так что заложить нетривиальную логику - "не вопрос". Открою вам страшную тайну, в оракле я даже могу написать свою собственную aggregate function если номенклатура оракловых функций MIN(), MAX(), AVG() ... и аналитических функций меня чем-то не устраивает. Соответсвенно я могу сделать любую "навигацию" причем в 98% случаев "малой кровью" - одним SQL запросом. С точки зрения же чисто практической у меня за много лет работы ни разу не возникала необходимость написать собственную агрегирующую функцию. Всегда обходился оракловыми, их много и разных, нужно только уметь ими пользоваться. В оракле одним SQL запросом можно даже линейную регрессию посчитать - есть такая встроенная функция...

Что до таблицы дефицита - делается в 2 оператора SQL, один вставляет в таблицу "поставок" второй - в таблицу "дефицитов" при условии что это 2 разые таблицы. Никаких принципиальных сложностей опять не вижу в упор, ну никак.

Вообще что такое "навигационный метод доступа к данным" мне кто-нибудь формально и вразумительно сформулирует? Пока что, исходя из приведенных примеров я не вижу никаких сложностей для SQL и конкретной оракловой его реализации. Хотелось бы услышать что-то в духе "Дано множество элементов М, на нем задано отношение порядка "O" обладающее следуюшими свойствами (...). Навигационный доступ к данным - это ...". Сдается мне что в ответ на такое определение я смогу продемонстрировать что таковой доступ реализуем как минимум на оракловом диалекте языка SQL.
30 ноя 06, 23:53    [3476173]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
Зл0й
В принципе я могу вызвать любую доступную в PL/SQL функцию, в том числе и мною написанную прямо там же, где case ... when.

Поправка, не любую а только такую которая Deterministinc и Writes No Database State. Пока я еще не успел за эту лажу по шее получить ;)
1 дек 06, 00:06    [3476187]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67427
Блог
Зл0й
Что до таблицы дефицита - делается в 2 оператора SQL, один вставляет в таблицу "поставок" второй - в таблицу "дефицитов" при условии что это 2 разые таблицы.

Думаю, при желании можно обойтись и единственным многотабличным INSERT-ом :)
1 дек 06, 00:08    [3476190]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
iscrafm
Зл0й

Вы внутрь своего селекта, приведенного так изящно, вставьте логику какую-нибудь. Хотя-бы простейшую. И в случае если нет нужного количества - запишите исключение в таблицу дефицита.


begin 

insert into my_part_shipments (...)
select ...
        case when ... then ... else ... end 
        ...
  from ...
where some_condition=true
;

insert into my_parts_missing (...)
select ...
        case when ... then ... else ... end 
        ...
  from ...
where some_condition=false
;

commit;


Вот и все. Какие проблемы-то?
1 дек 06, 00:12    [3476196]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
softwarer
Зл0й
Что до таблицы дефицита - делается в 2 оператора SQL, один вставляет в таблицу "поставок" второй - в таблицу "дефицитов" при условии что это 2 разые таблицы.

Думаю, при желании можно обойтись и единственным многотабличным INSERT-ом :)


Кстати да, согласен.
1 дек 06, 00:15    [3476200]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
softwarer
Зл0й
Что до таблицы дефицита - делается в 2 оператора SQL, один вставляет в таблицу "поставок" второй - в таблицу "дефицитов" при условии что это 2 разые таблицы.

Думаю, при желании можно обойтись и единственным многотабличным INSERT-ом :)


softwarer дело говорит, так лучше:

insert
        when some_condition=true then into my_part_shipments ...
        when some_condition=false then into my_parts_missing ...
select ...
  from ...
where ...
;
1 дек 06, 00:20    [3476207]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Мимо пробегал...
Guest
iscrafm
Вы внутрь своего селекта, приведенного так изящно, вставьте логику какую-нибудь
.....да ребяты, смешно :) уровень оппонентов снижается подобно кирпичу, выброшенному из окна....например в том же "примитивном" Акцессе можно накатать на VBA функцию с любыми параметрами и с любой логикой (в т.ч. напимер с добавлением записей в таблицы) и потом вызвать ее в любом SELECT'e.... Аналогичные возможности есть в MS SQL. Про Oracle уже сказали.

2 iscrafm
Если Вы про это не знали , то я вообще не понимаю, что Вы тут доказать пытаетесь :)
1 дек 06, 00:35    [3476224]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Мимо пробегал...
Guest
insert
when some_condition=true then into my_part_shipments ...
when some_condition=false then into my_parts_missing ...
select ...
from ...
where ...

ВАУ =) И чё - работает? Офигеть :)
1 дек 06, 00:37    [3476228]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67427
Блог
Мимо пробегал...
ВАУ =) И чё - работает? Офигеть :)

Работает. Я тут как-то показывал, что так можно даже мастер-деталь вставлять (в смысле - значение ключа, сгенерированное при инсерте в мастера, подставлять при инсертах в деталь).
1 дек 06, 00:39    [3476230]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Зл0й
Member

Откуда: Северная Калифорния
Сообщений: 686
Мимо пробегал...
insert
when some_condition=true then into my_part_shipments ...
when some_condition=false then into my_parts_missing ...
select ...
from ...
where ...

ВАУ =) И чё - работает? Офигеть :)


Если добавить вместо троеточий код - то работает "только в путь". Добавлять же его лень, хочется просто проиллюстрировать как эта проблема решается на оракловом SQL не вдаваясь в подробности.
1 дек 06, 00:41    [3476235]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
Мимо пробегал...
Guest
Кстати, аз уж пошла речь о деревьях, то в том же Акцессе можно написать функцию типа

Function RecursiveFunction(param)

....
  SELECT .... RecursiveFunction(childNodeKey) FROM TableContainedTree WHERE NodeKey = param
....

End Function

Здесь предполагается наличие таблицы TableContainedTree с полями (NodeKey, childNodeKey, ...), содержашей информацию о некой иерархии

....и эта функция прочешет дерево вниз начиная с заданного значением param узла за милую душу.
1 дек 06, 00:53    [3476260]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
iscrafm
Member [заблокирован]

Откуда:
Сообщений: 35345
Зл0й
iscrafm
Зл0й

Вы внутрь своего селекта, приведенного так изящно, вставьте логику какую-нибудь. Хотя-бы простейшую. И в случае если нет нужного количества - запишите исключение в таблицу дефицита.


insert into my_part_shipments (...)
select ...
        case when ... then ... else ... end 

Вот и все. Какие проблемы-то?


Обалдеть... мда. Грустно все это.
Вы хоть понимаете, что
update a set b = 0 where b = 0
обновит записи, у которых b=0 на начало транзакции? Судя по всему нет. Зато выучили синтаксис PL/SQL
1 дек 06, 01:29    [3476331]     Ответить | Цитировать Сообщить модератору
 Re: CACHE и MSSQL  [new]
ЛП
Guest
Мимо пробегал...
Кстати, аз уж пошла речь о деревьях, то в том же Акцессе можно написать функцию типа

Function RecursiveFunction(param)

....
  SELECT .... RecursiveFunction(childNodeKey) FROM TableContainedTree WHERE NodeKey = param
....

End Function

Здесь предполагается наличие таблицы TableContainedTree с полями (NodeKey, childNodeKey, ...), содержашей информацию о некой иерархии

....и эта функция прочешет дерево вниз начиная с заданного значением param узла за милую душу.

Нимнофка некошерный код патамушта селект надо обернуть фсякими ДАО/АДОДБ, но в общем и целом верно.
1 дек 06, 01:29    [3476333]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 52 53 54 55 56 [57] 58 59 60 61 .. 106   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить