Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.049 c
14-1089786998
Ozone
2004-07-14 10:36
2004.08.01
Настройки Excel я


14-1089944676
StarCon
2004-07-16 06:24
2004.08.01
Дельфи 8


14-1089922108
bloodman
2004-07-16 00:08
2004.08.01
Компонент для Delphi


4-1087799466
ZHK
2004-06-21 10:31
2004.08.01
FreeLibrary


3-1089030764
R.O.O.T
2004-07-05 16:32
2004.08.01
Проблемы при работе с DAO