Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ограничение на поле


Страницы:   1 2 3

}|{yk ©   (2004-03-31 13:19:00) 

Как сделать ограничение на поле? Оно может принимать или значение из таблицы, или -1 (для дерева). В констрейнт не получается - нельзя подзапросы писать, с вьюхой связать тоже нельзя. А вообще как-то реализовывать можно? Можно конечно триггер написать, но это как-то неправильно...


Sergey13   (2004-04-01 08:21:00) [1]

2}|{yk ©   (31.03.04 18:41) [40]
Как могут "деревянные" поля ссылаться на справочник?


roottim   (2004-03-31 20:12:00) [2]

2jonmen
хорошо переделаю  exists - sql оператор а не ф-я

2жук
а что мешает сделать корень = null?
тогда в этом случае можно просто сделать констрейнт в виде вненего ключа самого на себя
ALTER TABLE MY_TABLE
ADD CONSTRAINT MY_TABLE_TREE FOREIGN KEY(PARENT_ID)
REFERENCES MY_TABLE(ID) ON DELETE CASCADE


Sergey13   (2004-03-31 18:46:00) [3]

2}|{yk ©   (31.03.04 18:41) [40]
Опиши структуру таблиц и задачу, а то запутал ты всех, ИМХО.
Завтра продолжим, надеюсь.
Я домой.


}|{yk   (2004-03-31 18:41:00) [4]

просто я фиктивный элемент в справочник статей добавлять не могу
потому нужна проверка кроме того для дерева нужна проверка на циклы


Sergey13   (2004-03-31 18:35:00) [5]

2}|{yk ©   (31.03.04 18:23) [38]
А по делу то, на чем остановился, на процедуре/тригере или на моем правильном предложении? 8-)


}|{yk   (2004-03-31 18:23:00) [6]

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


Sergey13   (2004-03-31 17:58:00) [7]

2Курдль ©   (31.03.04 17:52) [36]
Ну большому кораблю...
Мы уж лопатой да совком как нибудь, зато поближе к земле. 8-)


Курдль   (2004-03-31 17:52:00) [8]


> >а уходят вглубь корнями аж до ER-модели
> Эк ты как глубоко копнул. Лопату не сломал? 8-)

8=()
Я уж давно меньше, чем экскаваторами не практикую.
Рисуешь неделю какую-то хреноплетень из прямоугольничков и стрелочек, а потом нажатием 2-х кнопок (создать физ.модель/ генерировать БД) получаешь ораклевую базу со всеми ее деревьями! :)


Sergey13   (2004-03-31 17:47:00) [9]

2Курдль ©   (31.03.04 17:37) [34]
>а уходят вглубь корнями аж до ER-модели
Эк ты как глубоко копнул. Лопату не сломал? 8-)

>А такие приколы, как форинкей еще там отлавливаются! :)
Это проца по сравнению с форином прикол. 8-)


Курдль   (2004-03-31 17:37:00) [10]


> Да и обычно так деревья в оракле растут.

В оракле деревья не так растут, а уходят вглубь корнями аж до ER-модели! А такие приколы, как форинкей еще там отлавливаются! :)


Sergey13   (2004-03-31 17:35:00) [11]

2Курдль ©   (31.03.04 17:28) [32]
А с чего бы он всю бодягу поднял (это я как вышедший из отпуска телепат говорю?
Да и обычно так деревья в оракле растут.
8-)


Курдль   (2004-03-31 17:28:00) [12]

У "заявителя" не прописано, что это форинкей! (Тогда б и ежу было понятно, что оракл не даст напортачить и без всяких "-1").


Sergey13   (2004-03-31 17:25:00) [13]

2Курдль ©   (31.03.04 17:15) [30]
>Это позволит лишь отказаться от проверки "на -1", но не от проверки "есть ли такое значение в таблице".
Почему это? Ставишь форинкей с ПарентИД на ИД и фсе.


Курдль   (2004-03-31 17:15:00) [14]


> Вместо -1 NULL или в ту таблицу, на которую ссылается -1
> как служебную строку добавить? И включай простой констрейнт.

Это позволит лишь отказаться от проверки "на -1", но не от проверки " есть ли такое значение в таблице". А в последнем случае придется таки писать триггер.
Процедуры, подменяющие insert, update, delete - это опасная стратегия. Ведь некто может и не знать/забыть/не обратить внимания на то, что в таблицу разрешено вносить записи только через процедуру и долбануть insert. Зато триггер всегда начеку, как пограничная собака :)


Sergey13   (2004-03-31 17:09:00) [15]

2roottim   (31.03.04 17:02) [27]
Я понял. Мое "или в ту таблицу, на которую ссылается -1 как служебную строку добавить" следует читать как "или в таблицу -1 как служебную строку добавить". 8-)
А вот про проще/надежнее - почему это? Стандартный констр всяко надежнее и шустрее, ИМХО. К тому же иногда процедуры имеют свойство выключаться незаметно. 8-(

Чем меньше серверу мы пишем
Тем меньше сервер тормозит.
(с) Моя вольная трактовка классики 8-)


Johnmen   (2004-03-31 17:08:00) [16]

>2. exists это предикат sql а не функция и неотделим от него

Это в Оракле он так называется ?


roottim   (2004-03-31 17:02:00) [17]

2Sergey13 ©   (31.03.04 16:47) [26]
да речь здесь видимо не о внешнем констрейнте а о проверке дерево..
1. процедурой проще и надежней..
2. exists это предикат sql а не функция и неотделим от него
3. приведу пример , но проверять не буду для триггера перед_вставкой
begin
 select id into :NEW.parent_id from my_table t where t.id = :NEW.parent_id;
 -- если ид такого нет.. получите екскептион.. NO_DATA_FOUND
 -- если есть то есть :)  
end;


Sergey13   (2004-03-31 16:47:00) [18]

2}|{yk ©   (31.03.04 13:19)
А если все по другому, попроще. 8-)
Вместо -1 NULL или в ту таблицу, на которую ссылается -1 как служебную строку добавить? И включай простой констрейнт.


Johnmen   (2004-03-31 16:30:00) [19]

>Курдль ©   (31.03.04 16:14) [22]
>Для установления истины не поленился ...

:)
Если еще не лень, то стоит сделать проверку корректно. Т.е. в запросе отвязаться от специфики/конкретики. Запрос д.б. прост.
Типа SELECT * FROM Table.

>}|{yk ©   (31.03.04 16:16) [23]

Странно... Но возможно...


Курдль   (2004-03-31 16:29:00) [20]


> наверно в 9 можно exists использовать в pl/sql. А в 8 нельзя

Не-а! Когда я упростил до нельзя, - отругалося конкретно:
"функция или псевдо-столбец 'EXISTS' могут быть использованы только внутри оператора 'SELECT'!


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо