Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Ферзевой constraint  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
Хочу записать расположение N ферзей на доске произвольного размера в таблице.
Ферзи, как в известной задаче, не должны угрожать друг другу.

Началось все хорошо:
create table qtable
(
  x integer not null,
  y integer not null
);
alter table qtable  add constraint UK__QTABLE_X unique (X);
alter table qtable  add constraint UK__QTABLE_Y unique (Y);


Теперь надо как-то прикрутить диагональный constraint, желательно без кода.
Господа шахматисты, как это лучше сделать?

Нужно чтобы таблица одинаково била по рукам за нарушение рядов, столбцов или диагонали.
17 ноя 20, 23:45    [22234258]     Ответить | Цитировать Сообщить модератору
 Re: Ферзевой constraint  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
A, тьфу, попробовал наугад и получилось.

Запостю ответ завтра, на случай кто-то не знает ответ и хочет поупражняться.
17 ноя 20, 23:55    [22234261]     Ответить | Цитировать Сообщить модератору
 Re: Ферзевой constraint  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
НеофитSQL
alter table qtable  add constraint UK__QTABLE_XY1 unique (X+Y);
alter table qtable  add constraint UK__QTABLE_XY2 unique (X-Y);
печаль. было бы что тут думать...
18 ноя 20, 01:19    [22234290]     Ответить | Цитировать Сообщить модератору
 Re: Ферзевой constraint  [new]
НеофитSQL
Member

Откуда: Маями
Сообщений: 760
xtender,

То, что могучим модераторам легко, у новичков заняло минуту, а то и три :)

Правда, я сделал хуже, через виртуальные столбцы*.
Потом пришлось поломать голову, как в таблицу с виртуальными столбцами добавлять строки.

* UI разбаловал. Я не подумал про constraints на выражения.
18 ноя 20, 02:13    [22234302]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить