Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 54 55 56 57 58 [59] 60 61 62 63 .. 75   вперед  Ctrl
 Re: Выбор СУБД!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
locky
skelet

хм, и он не требует никаких констрейнтов совсем?
а если tab2.id неуникальный? Можете запустить этот код и показать результат?

Не требует.
tab2.id - уникальный. "Я гарантирую это" (С)


+1. Мамой клянусь! ;)

Gluk (Kazan)
А каким документом заверяется эта гарантия, данная Вами серверу БД ?


Коллеги! Ну сколько можно?! Ведь уже перетирали поведение UPDATE ... FROM ... при неуникальности соответствия записей. И эффект описывался цитатой из BOL:

The results of an UPDATE statement are undefined if the statement includes a FROM clause that is not specified in such a way that only one value is available for each column occurrence that is updated, that is if the UPDATE statement is not deterministic.

И ошибки при этом никакой не будет.

В 2008 в MERGE будет ошибка.
5 фев 09, 13:19    [6782922]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Gluk (Kazan)
locky
skelet

хм, и он не требует никаких констрейнтов совсем?
а если tab2.id неуникальный? Можете запустить этот код и показать результат?

Не требует.
tab2.id - уникальный. "Я гарантирую это" (С)


А каким документом заверяется эта гарантия, данная Вами серверу БД ?

Например, таким:
update (
select t1.name,t2.oname
from   tab1 t1 inner join (select id,max(name) as oname from tab2 group by id) t2 on t1.id = t2.id
)
set name=oname
5 фев 09, 13:19    [6782924]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
locky
Yo.!
ручки кривые ? ;)
SQL> ALTER TABLE tab1 add CONSTRAINT fk_tab FOREIGN KEY (id) REFERENCES tab2(id);
Table altered.
SQL> update (select t1.name as a,t2.name as b from tab1 t1 inner join tab2 t2 on t1.id = t2.id) set a='shit' ;
1 row updated.


Во первых, позволю себе процитировать: "Схему, извини, менять нельзя.".
Во вторых, кто тебе сказал, что там таки МОЖНО построить FK?
Нельзя, понимаешь ли.
Ни в одну сторону, ни в другую.
Потому как tab1 это моя рабочая табличка, а tab2 - GTT(sic!), залитая извне. И из неё я проставляю себе новые, обновленные названия для своих... товаров, скажем.

Да и вообще, tab2 - не таблица, а представление. на dblink. а сам линк - на мускул. ну т.е. - ну никак не получится сделать FK


Собственно ежели таблицы в общем случае у вас независимые в плане id, то вполне логично что субд запрещает в общем случае безумную операцию по кривому апдейту.
5 фев 09, 13:21    [6782931]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Yo.!
а дропать всю базу данных вам не приходило в голову, чтоб внести изменения ? нет ? мне тоже, наверно потому ораклойды как-то чаще ALTER TABLE юзают

До:
create table MyTemp(id number, name varchar2)

после
create table MyTemp(name varchar2,id_new number )
какой альтер пишем?
5 фев 09, 13:21    [6782933]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
skelet
Собственно ежели таблицы в общем случае у вас независимые в плане id, то вполне логично что субд запрещает в общем случае безумную операцию по кривому апдейту.

Смотри пример выше, с апдейтом из группирующего подзапроса.
5 фев 09, 13:22    [6782941]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
The results of an UPDATE statement are undefined ...


Т.е. это отдается на откуп разработчику ?
Подход Oracle мне представляется более продуманным
5 фев 09, 13:28    [6782987]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Yo.!
Guest
locky

До:
create table MyTemp(id number, name varchar2)

после
create table MyTemp(name varchar2,id_new number )
какой альтер пишем?


ALTER TABLE mytemp rename column id to id_new ;
5 фев 09, 13:30    [6783000]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Yo.!
locky

До:
create table MyTemp(id number, name varchar2)

после
create table MyTemp(name varchar2,id_new number )
какой альтер пишем?


ALTER TABLE mytemp rename column id to id_new ;


А ничо, что раньше ID был первым, а потом стал вторым?
5 фев 09, 13:33    [6783021]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Gluk (Kazan)
pkarklin
The results of an UPDATE statement are undefined ...


Т.е. это отдается на откуп разработчику ?
Подход Oracle мне представляется более продуманным



create table tariffs(prod number,df date,dt date,price number)
create table prods(prod number,price number)

update (
select p.price,t.price as p1
from prods p join tariffs t on p.prod = t.prod
where t.df < sysdate and sysdate < dt
)
set price = p1
Банальная задача: проставить в таблицу товаров текущие цены.
Вы согласны, что приложение ГАРАНТИРУЕТ, что для одного и того же товара одновременно не обьявлено более одной цены в одном периоде?
5 фев 09, 13:34    [6783030]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Gluk (Kazan)
locky
skelet

хм, и он не требует никаких констрейнтов совсем?
а если tab2.id неуникальный? Можете запустить этот код и показать результат?

Не требует.
tab2.id - уникальный. "Я гарантирую это" (С)


А каким документом заверяется эта гарантия, данная Вами серверу БД ?

Например, таким:
update (
select t1.name,t2.oname
from   tab1 t1 inner join (select id,max(name) as oname from tab2 group by id) t2 on t1.id = t2.id
)
set name=oname


Это не документ, а адын канкретный запрос (ничего не показывающий и тем более не гарантирующий)
Собственно МСУ уже ответил
5 фев 09, 13:38    [6783053]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Yo.!
locky

До:
create table MyTemp(id number, name varchar2)

после
create table MyTemp(name varchar2,id_new number )
какой альтер пишем?


ALTER TABLE mytemp rename column id to id_new ;


А ничо, что раньше ID был первым, а потом стал вторым?


Стыдись, Белое Перо (c)
Какой такой порядок колонок в РСУБД ???
5 фев 09, 13:39    [6783063]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Gluk (Kazan)

Это не документ, а адын канкретный запрос (ничего не показывающий и тем более не гарантирующий)
Собственно МСУ уже ответил

эээ.... А что, в оракле возможна ситуация, когда аггрегирующий подзапрос вернёт повторения по ключам аггрегации?
5 фев 09, 13:39    [6783064]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Gluk (Kazan)
Стыдись, Белое Перо (c)
Какой такой порядок колонок в РСУБД ???

До тех пор, пока на физическом уровне разрешен синтаксис insert into Table values()
или select * - с порядком колонок приходится считаться.
5 фев 09, 13:40    [6783070]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Gluk (Kazan)
pkarklin
The results of an UPDATE statement are undefined ...


Т.е. это отдается на откуп разработчику ?
Подход Oracle мне представляется более продуманным



create table tariffs(prod number,df date,dt date,price number)
create table prods(prod number,price number)

update (
select p.price,t.price as p1
from prods p join tariffs t on p.prod = t.prod
where t.df < sysdate and sysdate < dt
)
set price = p1
Банальная задача: проставить в таблицу товаров текущие цены.
Вы согласны, что приложение ГАРАНТИРУЕТ, что для одного и того же товара одновременно не обьявлено более одной цены в одном периоде?


Приложение ничего гарантировать не может, поскольку могло быть написано пьяным разработчиком в канун Нового Году :( Гарантии Базе Данных могут дать только констрейнты в Базе Данных

Иначе чем мы лучше ЧАЛ-а с его "хорошо написанными приложениями" ?
5 фев 09, 13:42    [6783081]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Yo.!
Guest
locky


ALTER TABLE mytemp rename column id to id_new ;


А ничо, что раньше ID был первым, а потом стал вторым?[/quot]
действительно стыдись, SQL язык декларативный.
предвосхищая следующий вопрос, да есть aler table ... drop columnt, есть alter table ... add columnt, есть alter table rename. дропать всю таблицу глупо.
5 фев 09, 13:42    [6783082]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Gluk (Kazan)
Приложение ничего гарантировать не может, поскольку могло быть написано пьяным разработчиком в канун Нового Году :( Гарантии Базе Данных могут дать только констрейнты в Базе Данных
Иначе чем мы лучше ЧАЛ-а с его "хорошо написанными приложениями" ?

Йохана бабай.... Пошел снимать деньги с банка....
Там ить приложения тоже, тово - ничо не гарантируют ;)
мало-ли, потеряется исчо.....
Да и сотовая связь явно тарифы неправильно считает.... Собственно все, кто использует попериодные тарифы - никому ничо не гарантируют
5 фев 09, 13:45    [6783095]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Gluk (Kazan)

Это не документ, а адын канкретный запрос (ничего не показывающий и тем более не гарантирующий)
Собственно МСУ уже ответил

эээ.... А что, в оракле возможна ситуация, когда аггрегирующий подзапрос вернёт повторения по ключам аггрегации?


А что, вложенный запрос обязан быть агрегирующим ???
СУБД это как-то проверяет ?
5 фев 09, 13:45    [6783096]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Gluk (Kazan)
Стыдись, Белое Перо (c)
Какой такой порядок колонок в РСУБД ???

До тех пор, пока на физическом уровне разрешен синтаксис insert into Table values()
или select * - с порядком колонок приходится считаться.


за звезды отрывать яйца разработчикам
безусловно
5 фев 09, 13:46    [6783098]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Yo.!
locky


ALTER TABLE mytemp rename column id to id_new ;


А ничо, что раньше ID был первым, а потом стал вторым?

действительно стыдись, SQL язык декларативный.
предвосхищая следующий вопрос, да есть aler table ... drop columnt, есть alter table ... add columnt, есть alter table rename. дропать всю таблицу глупо.[/quot]

Альтер, дроп, адд...
И так - 30 раз. Для каждой колонки
Потому как раньше это была совершенно одна таблица, а после стала совершенно другая
5 фев 09, 13:46    [6783102]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Gluk (Kazan)
locky
Gluk (Kazan)

Это не документ, а адын канкретный запрос (ничего не показывающий и тем более не гарантирующий)
Собственно МСУ уже ответил

эээ.... А что, в оракле возможна ситуация, когда аггрегирующий подзапрос вернёт повторения по ключам аггрегации?


А что, вложенный запрос обязан быть агрегирующим ???
СУБД это как-то проверяет ?

Если вы заметили - у меня в подзапросе был как раз аггрегирующий запрос ;)
5 фев 09, 13:47    [6783107]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Gluk (Kazan)
Приложение ничего гарантировать не может, поскольку могло быть написано пьяным разработчиком в канун Нового Году :( Гарантии Базе Данных могут дать только констрейнты в Базе Данных
Иначе чем мы лучше ЧАЛ-а с его "хорошо написанными приложениями" ?

Йохана бабай.... Пошел снимать деньги с банка....
Там ить приложения тоже, тово - ничо не гарантируют ;)
мало-ли, потеряется исчо.....
Да и сотовая связь явно тарифы неправильно считает.... Собственно все, кто использует попериодные тарифы - никому ничо не гарантируют


Ага Ты только что это понял ?
5 фев 09, 13:47    [6783108]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Yo.!
locky


ALTER TABLE mytemp rename column id to id_new ;


А ничо, что раньше ID был первым, а потом стал вторым?

действительно стыдись, SQL язык декларативный.
предвосхищая следующий вопрос, да есть aler table ... drop columnt, есть alter table ... add columnt, есть alter table rename. дропать всю таблицу глупо.


Альтер, дроп, адд...
И так - 30 раз. Для каждой колонки
Потому как раньше это была совершенно одна таблица, а после стала совершенно другая [/quot]

Прости, а тебе не пофигу ли один альтер в скрипте патча или несколько ?
5 фев 09, 13:47    [6783112]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
Gluk (Kazan)

за звезды отрывать яйца разработчикам
безусловно

Ну, административным путём решается много задач.
Но, я так понимаю, вы согласны, что "поменять местами колонки"- имеет место быть задача?
5 фев 09, 13:48    [6783114]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Gluk (Kazan)

за звезды отрывать яйца разработчикам
безусловно

Ну, административным путём решается много задач.
Но, я так понимаю, вы согласны, что "поменять местами колонки"- имеет место быть задача?


За такую задачу поступать с проектировщиками также как за звезды с разработчиками :)
В этом я непокобелим

locky

Если вы заметили - у меня в подзапросе был как раз аггрегирующий запрос ;)


Ну и до Нового Года, если Вы заметили еще далеко ;)
5 фев 09, 13:49    [6783135]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Yo.!
Guest
locky


Альтер, дроп, адд...
И так - 30 раз. Для каждой колонки
Потому как раньше это была совершенно одна таблица, а после стала совершенно другая

ага, пока не вылезет "ORA-777777: idiot quota exceed"
5 фев 09, 13:50    [6783136]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 54 55 56 57 58 [59] 60 61 62 63 .. 75   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить