Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

Пломбы...   Найти похожие ветки 

 
GanibalLector ©   (2004-07-08 22:26) [0]

Имеется следующая структура :
-серия пломб; varchar(2)
-начальный номер; int
-конечный номер;  int
Пример:
АА  000001  000250
АА  000251  003000
АБ  174000  192055

Так вот,необходимо что-бы пломбы не пересекались т.е. что-бы такого не было:
АА  000001  000009
АА  000002  000005 <- такие пломбы уже есть!!!
Вот думаю...как такое реализовать???Может изменить структуру таблицы???Что скажите


 
jack128 ©   (2004-07-08 23:24) [1]

на тригер повесить

if (exists(select 1 from Таблица where not (Конечный_номер_номер > new.Конечный_номер or Конечный_номер < new.Конечный_номер_номер)) then
exception EINVALID_PLOMDA


 
GanibalLector ©   (2004-07-08 23:34) [2]

>на тригер повесить
Как по мне,так проще в ХП запихнуть и там проверять.

И еще,а что значит 1. Ты вот пишешь : select 1
Никогда такого не видел.

З.Ы. Спасибо!!!


 
GanibalLector ©   (2004-07-08 23:38) [3]

2 jack128
И еще...там же замес с серией.Т.е. в твоей реализации такому не бывать:
АА 000001  000005
АБ 000001  000004

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


 
jack128 ©   (2004-07-08 23:41) [4]

а чего тут думать, добавить в условие new.Серия = Серия and


> if (exists(select 1 from Таблица where new.Серия = Серия and not (Конечный_номер_номер
> > new.Конечный_номер or Конечный_номер < new.Конечный_номер_номер))
> then
> exception EINVALID_PLOMDA


 
jack128 ©   (2004-07-08 23:44) [5]


> И еще,а что значит 1. Ты вот пишешь : select 1
> Никогда такого не видел
нам же не важно какие данные вернет запрос - нам нужно только узнать есть ли такие записи или нет. если убрать условие exists и оставить только запрос select 1 from .. то он вернет столько единиц сколько записей удволитворяют условиям этого запроса..

> Как по мне,так проще в ХП запихнуть и там проверять
смотри сам - с твой колокольни виднее..


 
3APA3A   (2004-07-08 23:54) [6]

Можешь, конечно, изменить структуру таблицы, но я думаю правильнее будет в триггере перед добавлением новой записи проверять это...
 Примерно так
SET TERM!!;
CREATE TRIGGER BEF_INS FOR YOURTABLE
ACTIVE BEFORE INSERT
AS
DECLARE START_NUM INTEGER;
DECLARE END_NUM INTEGER;
BEGIN
 FOR SELECT START_NUMBER, END_NUMBER FROM ASD ORDER BY START_NUMBER INTO :START_NUM, :END_NUM
 DO
   IF (
   ((NEW.START_NUMBER >= :START_NUM) AND (NEW.END_NUMBER <= :END_NUM))
    OR
   ((NEW.START_NUMBER <= :START_NUM) AND (NEW.END_NUMBER >= :START_NUM))
    OR
   ((NEW.START_NUMBER <= :END_NUM) AND (NEW.END_NUMBER >= :END_NUM))
   ) THEN EXCEPTION PIZDEC;
 
END!!
SET TERM;!!


 
Johnmen ©   (2004-07-09 09:09) [7]

>GanibalLector ©  

Тебе конкретно что надо ?
Просто факт пересечения или вывод пересекающихся ?


 
Соловьев ©   (2004-07-09 09:24) [8]


> Вот думаю...как такое реализовать???Может изменить структуру
> таблицы???Что скажите

Имхо, таблица из двух полей:

1-е - Серия
2-е - номер(ключевое)


 
Соловьев ©   (2004-07-09 09:27) [9]


> 1-е - Серия
> 2-е - номер(ключевое)

хтя, конечно нужно 2 поля как коючевое использовать. Серии то разные бывают...


 
GanibalLector ©   (2004-07-09 09:37) [10]

2 Johnmen
Исключение пересечения пломб.Вроде бы в [0] все написано.

2 Соловьев
>Имхо, таблица из двух полей
Да я тоже думал о этом.Но,контора получает по 1000 пломб в два месяца.И вот представь себе...либо 1 запись либо 1000.

2 ALL
Всем спасибо.[1] и [6] устраивают целяком и полностью.


 
Соловьев ©   (2004-07-09 09:40) [11]


> либо 1 запись либо 1000.

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


 
Курдль ©   (2004-07-09 09:41) [12]


> jack128 ©   (08.07.04 23:24) [1]
> на тригер повесить
> GanibalLector ©   (08.07.04 23:34) [2]
> Как по мне,так проще в ХП запихнуть и там проверять.


А почему не оформить, как декларацию ООН???
Мне кажется, что уникального индекса будет вполне достаточно.

(ХП - самый наихудший из всех возможных вариантов, включая декларацию ООН!)


 
Johnmen ©   (2004-07-09 09:45) [13]

>GanibalLector ©   (09.07.04 09:37) [10]
>Вроде бы в [0] все написано.
>>>Так вот,необходимо что-бы пломбы не пересекались

Для этого достаточно их просто не вводить...:)


 
GanibalLector ©   (2004-07-09 09:53) [14]

2 Соловьев
>причем можно по каждой пломбе вести инфу, а что можно сделать с такой структорой что сейчас? токо траблы.

Да он и так ведется,но в других таблицах.А эта таблица только для проверок.Т.е. мне нельзя использовать пломбу если ее нет в пришедших и (все описаное выше) пересечение.

2 Курдль
Ок.

2 Johnmen
Ну вот...опять началось.

2 ALL
Да говорю-же вопрос СНЯТ.


 
Johnmen ©   (2004-07-09 09:57) [15]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html
Без обид.


 
jack128 ©   (2004-07-09 11:04) [16]


> Мне кажется, что уникального индекса будет вполне достаточно.
на что ты иникальный ключ вешать собираешься?


 
Курдль ©   (2004-07-09 11:13) [17]


> jack128 ©   (09.07.04 11:04) [16]
> на что ты иникальный ключ вешать собираешься?

Сорри! Невнимательно прочитал невнятное условие автора.
Оказывается надо, чтобы интервалы номеров пломб не пересекались!
Тогда однозначно триггер!


 
Соловьев ©   (2004-07-09 11:16) [18]


> .А эта таблица только для проверок.Т.е. мне нельзя использовать
> пломбу если ее нет в пришедших и (все описаное выше) пересечение.

Я так и не понял нафиг проверка? зачем еще одна сушность в бд? чтобы жизнь малиной не казалась? :)


 
Соловьев ©   (2004-07-09 11:17) [19]


> Пример:
> АА  000001  000250
> АА  000251  003000
> АБ  174000  192055

можно с помощью ХП построить из табицы вида [8]


 
Курдль ©   (2004-07-09 11:30) [20]


> Соловьев ©   (09.07.04 11:16) [18]
> Я так и не понял нафиг проверка? зачем еще одна сушность
> в бд? чтобы жизнь малиной не казалась? :)

Вот и я не понял... Если надо в любом случае регистрировать каждую пломбу, то [12]. Если только регистрировать серии пломб без детализации - [17].



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.053 c
3-1089063526
Sir John
2004-07-06 01:38
2004.08.01
TclientDataSet и поля с autoincrement


1-1089792211
msdn
2004-07-14 12:03
2004.08.01
Копирование файла


4-1087565956
help
2004-06-18 17:39
2004.08.01
Screenshot


1-1090235363
Dysan
2004-07-19 15:09
2004.08.01
хранение данных в стриме


14-1088772941
Иксик
2004-07-02 16:55
2004.08.01
Имена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский