Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

уникальный индекс на 2 таблицы

99 views
Skip to first unread message

Andrey Borodulin

unread,
Feb 3, 2004, 3:22:04 AM2/3/04
to
Hello, All!

можно сделать сабж? т.е. есть 2 таблицы, у каждой есть текстовое поле. Нужно
посадить уникальный индекс на оба поля в разных таблицах одновременно
(надеюсь внятно выразился).
Оракл 9.2.
Вообще нужна уникальность, поэтому не обязательно индекс.

With best regards, Andrey Borodulin. E-mail: zu...@land.ru


Zhirenkov Vitaly

unread,
Feb 3, 2004, 3:52:19 AM2/3/04
to
Привет!

Andrey Borodulin пишет:
AB> Hello, All!

AB> можно сделать сабж? т.е. есть 2 таблицы, у каждой есть текстовое
поле. Нужно
AB> посадить уникальный индекс на оба поля в разных таблицах
одновременно
AB> (надеюсь внятно выразился).
AB> Оракл 9.2.
AB> Вообще нужна уникальность, поэтому не обязательно индекс.

Думаю что только триггерами...

--
Zhirenkov Vitaly
Oracle9i PL/SQL Developer Certified Associate
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Kuznetsov Andrey

unread,
Feb 3, 2004, 4:32:33 AM2/3/04
to
Привет!
а зачем?
какая цель - производительность, разделение прав?

может сделать две партиции в одной таблице
и views


Andrey Borodulin

unread,
Feb 3, 2004, 4:49:37 AM2/3/04
to
Hello, Kuznetsov!
You wrote to Andrey Borodulin on Tue, 3 Feb 2004 09:32:33 +0000 (UTC):

KA> а зачем?
KA> какая цель - производительность, разделение прав?

при проектировании базы не учёл один маленький факт... хочется обойтись
малой кровью.

KA> может сделать две партиции в одной таблице и views

хороший вариант, спасибо!

Vladimir Begun

unread,
Feb 3, 2004, 2:22:53 PM2/3/04
to
Andrey Borodulin wrote:
> можно сделать сабж? т.е. есть 2 таблицы, у каждой есть текстовое поле. Нужно
> посадить уникальный индекс на оба поля в разных таблицах одновременно
> (надеюсь внятно выразился).
> Оракл 9.2.
> Вообще нужна уникальность, поэтому не обязательно индекс.

1. Раз необязательно индекс... только непонятно про ограничения UNIQUE для
каждой из таблиц.
DROP TABLE a;
DROP TABLE b;

CREATE TABLE a (v VARCHAR2(10) UNIQUE NOT NULL);
CREATE TABLE b (v VARCHAR2(10) UNIQUE NOT NULL);
CREATE MATERIALIZED VIEW LOG ON a WITH ROWID, SEQUENCE (v) INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW LOG ON b WITH ROWID, SEQUENCE (v) INCLUDING NEW VALUES;

DROP MATERIALIZED VIEW mv_ab;
CREATE MATERIALIZED VIEW mv_ab
REFRESH FAST ON COMMIT
AS
SELECT a.v, COUNT(a.v) cnt, COUNT(*)
FROM a, b
WHERE a.v = b.v
GROUP BY a.v
/
ALTER TABLE mv_ab ADD CONSTRAINT c$mv_ab CHECK (v IS NULL);

INSERT INTO a VALUES('test');
INSERT INTO b VALUES('test');
COMMIT;

INSERT INTO a VALUES('vbegun');
INSERT INTO b VALUES('aborodulin');
UPDATE a SET v = 'aborodulin';
COMMIT;

Ограничение будет a-la отложенным.

2. Partitions/views/либо полная спецификация имени партиции при выборке.
3. Triggers
4. Изменения дизайна

Каждый из способов лучше измерить под-нагрузкой, partitions выглядят
самым простым решением, но нужет global unique index -- а тут уже нужно
думать о maintenance.
--
Vladimir Begun
The statements and opinions expressed here are my own and
do not necessarily represent those of Oracle Corporation.

Владимир Кочнев

unread,
Feb 3, 2004, 10:10:39 PM2/3/04
to

"Andrey Borodulin" <zu...@perm.raid.ru> сообщил/сообщила в новостях
следующее: news:bvnlmt$iku$1...@ddt.demos.su...

> Hello, All!
>
> можно сделать сабж? т.е. есть 2 таблицы, у каждой есть текстовое поле.
Нужно
> посадить уникальный индекс на оба поля в разных таблицах одновременно
> (надеюсь внятно выразился).
> Оракл 9.2.
> Вообще нужна уникальность, поэтому не обязательно индекс.
>
еще вариант для разнообразия.
1. создать еще одну таблицу у которой есть такое же текстовое поле и создать
по нему уникальный индекс.
2. на 2 исходные таблицы повесить по триггеру, которые соответственно
делают insert, update или delete в этой третьей таблице

--

Evgeny Filippenkov

unread,
Feb 4, 2004, 12:40:56 AM2/4/04
to
"Andrey Borodulin" <zu...@perm.raid.ru> сообщил/сообщила в новостях
следующее: news:bvnlmt$iku$1...@ddt.demos.su...
> Hello, All!
>
> можно сделать сабж? т.е. есть 2 таблицы, у каждой есть текстовое поле.
Нужно
> посадить уникальный индекс на оба поля в разных таблицах одновременно
> (надеюсь внятно выразился).
> Оракл 9.2.

Если я прально понял, то кластер спасет отца русской демократии.

> Вообще нужна уникальность, поэтому не обязательно индекс.

Одно без другого не бывает.

>
> With best regards, Andrey Borodulin. E-mail: zu...@land.ru
>
>

--
With best regards, Eugene Filippenkov.
E-mail : my_trashbox AT ukrpost.net

Vladimir Begun

unread,
Feb 4, 2004, 2:08:02 PM2/4/04
to
Evgeny Filippenkov wrote:
> Если я прально понял, то кластер спасет отца русской демократии.

ORA-01715


--
Vladimir Begun
The statements and opinions expressed here are my own and
do not necessarily represent those of Oracle Corporation.

Andrey Borodulin

unread,
Feb 5, 2004, 1:22:59 AM2/5/04
to
Hello, Vladimir!
You wrote to Andrey Borodulin on Tue, 3 Feb 2004 19:22:53 +0000 (UTC):

VB> 1. Раз необязательно индекс... только непонятно про ограничения
VB> UNIQUE для каждой из таблиц.
VB> DROP TABLE a;
VB> DROP TABLE b;

[Sorry, skipped]


VB> Ограничение будет a-la отложенным.

красиво..., никогда бы не догадался использовать snapshot'ы ;)

[Sorry, skipped]

спасибо за ответ! вопросов больше нет

Evgeny Filippenkov

unread,
Feb 5, 2004, 3:07:25 PM2/5/04
to

"Vladimir Begun" <Vladimi...@oracle.com> сообщил/сообщила в новостях
следующее: news:4021429...@oracle.com...

> Evgeny Filippenkov wrote:
> > Если я прально понял, то кластер спасет отца русской демократии.
>
> ORA-01715

Т.е. только если егойные(вопрошавшего) поля можно будет назначить первичным
ключем ?
Вопрошавший, у тебя там null-ы возможны ? Можно эти поля сделать первичнвм
ключем ? Кластер, должет быть тогда простым и элегантным решением.

> --
> Vladimir Begun
> The statements and opinions expressed here are my own and
> do not necessarily represent those of Oracle Corporation.
>
>
> Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Vladimir Begun

unread,
Feb 5, 2004, 4:45:54 PM2/5/04
to
Evgeny Filippenkov wrote:
>>>Если я прально понял, то кластер спасет отца русской демократии.
>>ORA-01715
> Т.е. только если егойные(вопрошавшего) поля можно будет назначить первичным
> ключем? ... Кластер, должет быть тогда простым и элегантным решением.

Oracle9i Database Concepts Release 2 (9.2)
10 Schema Objects
Clusters

"Each cluster key value is stored only once each in the cluster and
the cluster index, no matter how many rows of different tables contain
the value."

DROP TABLE a;
DROP TABLE b;

DROP CLUSTER c_join;

CREATE CLUSTER c_join (v VARCHAR2(10));
CREATE INDEX idx$c_join ON CLUSTER c_join;
CREATE TABLE a (v VARCHAR2(10) CONSTRAINT a$pk PRIMARY KEY) CLUSTER c_join(v);
CREATE TABLE b (v VARCHAR2(10) CONSTRAINT b$pk PRIMARY KEY) CLUSTER c_join(v);


INSERT INTO a VALUES('vbegun');

INSERT INTO b VALUES('vbegun');

COMMIT;

INSERT INTO a VALUES('vbegun');

INSERT INTO b VALUES('vbegun');

Andrey Borodulin

unread,
Feb 5, 2004, 11:41:19 PM2/5/04
to
Hello, Evgeny!
You wrote to Vladimir Begun on Thu, 5 Feb 2004 20:07:25 +0000 (UTC):

EF> Т.е. только если егойные(вопрошавшего) поля можно будет назначить
EF> первичным ключем ? Вопрошавший, у тебя там null-ы возможны ?

null-ы не возможны

EF> Можно эти поля сделать первичнвм ключем ?

первичным ключем - нет.

0 new messages