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

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

Как обеспечить невозможность вставки данных в обратном порядке


Страницы:   1 2

Игорь Шевченко ©   (2007-09-28 11:59:00) 

Имеется таблица из двух полей (город1, город2)
Требуется обеспечить отсутствие записей с обратным порядком тех же самых городов, если есть запись "Москва","Бобруйск", то запись "Бобруйск","Москва" должно невозможно добавить любым способом.

Вопрос собственно, можно ли объявить такое ограничение на уровне объявления таблицы ?


evvcom   (2007-10-01 09:02:00) [1]


> Petr V. Abramov ©   (28.09.07 22:48) [30]

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


Petr V. Abramov   (2007-09-28 22:48:00) [2]

> Игорь Шевченко ©
в пределах консерватории решение красивое :)))


Игорь Шевченко   (2007-09-28 16:25:00) [3]

Anatoly Podgoretsky ©   (28.09.07 16:04) [23]

Да, конечно на уровне сервера. Уникальным индексом по функции я вроде добился нужного.


Павел Калугин   (2007-09-28 16:22:00) [4]

> [27] evvcom ©   (28.09.07 16:19)

увы мне увы....


evvcom   (2007-09-28 16:19:00) [5]


> Павел Калугин ©   (28.09.07 16:07) [25]

В чистом виде это на Оракл не перевести, а с минимальной корректировкой можно, но такое Оракл зарубит сразу. У него другие принципы, отличные от MSSQL.


sniknik   (2007-09-28 16:14:00) [6]

Павел Калугин ©   (28.09.07 16:07) [25]
решение в [6] и проше. и, имхо, менее "напряжно" для сервера. (чтобы точно, это надо проверить)


Павел Калугин   (2007-09-28 16:07:00) [7]

Ну если на входе код города, да еще и цифровой и код города 2, то решил бы уникальным индексом по полям city1, city2
и на insert поставил триггер
в котором
    if exists(select 1
                from foo f,inserted i
               where f.city1 = i.city2
                 and f.city2 = i.city1
              )
    begin
       raiseerror('Существует такая комбинация городов')
       rollback
       return
   end
       
Опять же прошу прощения что не в оракловом синтаксисе


sniknik   (2007-09-28 16:05:00) [8]

> про MSSql или про Sybase то написал бы кроме upper ещё ltrim rtrim
а я бы и upper убрал бы... это дело коллатионов сравнение/индексирование разноразрядных букв (коллатион естественно бы поставил CASE IGNORE)


Anatoly Podgoretsky   (2007-09-28 16:04:00) [9]

> Игорь Шевченко  (28.09.2007 15:58:21)  [21]

Насколько я понимают тебе надо решение на уровне сервера.
На клиенте хоть и просто, но ненадежно.


Игорь Шевченко   (2007-09-28 15:58:00) [10]

Павел Калугин ©   (28.09.07 15:54) [20]

Пробелы не допускаются.


Игорь Шевченко   (2007-09-28 15:58:00) [11]

Павел Калугин ©   (28.09.07 15:49) [19]

Ввод осуществляется INSERT-ом :)
Города вводятся кодами, разумеется. И выбором и набором текста.


Павел Калугин   (2007-09-28 15:54:00) [12]

И если бы речь шла про MSSql или про Sybase то написал бы кроме upper ещё ltrim rtrim
то есть ltrim(rtrim(UPPER(city1))) и так далее
Ибо если вводит операторто никто не застрахован от
INSERT INTO FOO VALUES ('Москва','Бобруйск');
INSERT INTO FOO VALUES ('Бобруйск','   Москва   ');


Павел Калугин   (2007-09-28 15:49:00) [13]

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


Desdechado   (2007-09-28 15:31:00) [14]

> ON DELETE CASCADE
> Смело!
Для кросс-таблицы вполне нормально, хотя и не всегда нужно.


sniknik   (2007-09-28 14:53:00) [15]

> Интересно  MSSQL это поддерживает?
а че нет то? синтаксис записи конечно будет другой, а логику показанную в [6] почему и не повторить?


evvcom   (2007-09-28 14:27:00) [16]


> Это бизнес-правило такое.

Главное, чтобы оно было задокументировано. Чтобы потом было, чем отмахиваться при разборах "внезапного" исчезновения данных :)


Игорь Шевченко   (2007-09-28 14:20:00) [17]

Desdechado ©   (28.09.07 13:58) [13]

Пардон, не так выразился. Хотел сказать - на уровне объявлений :)

evvcom ©   (28.09.07 14:10) [14]


> Смело!


Это бизнес-правило такое.


evvcom   (2007-09-28 14:10:00) [18]


> ON DELETE CASCADE

Смело!


Desdechado   (2007-09-28 13:58:00) [19]

> А что это, если не секрет ?
На уровне индекса :)
На уровне таблицы - это UNIQUE CONSTRAINT.


stanislav   (2007-09-28 13:19:00) [20]

Reindeer Moss Eater ©   (28.09.07 12:40) [8]
Понял.Интересно  MSSQL это поддерживает?


Страницы:   1 2

Наверх

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