powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
25 сообщений из 26, страница 1 из 2
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40107974
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня,

в одном из проектов обнаружил проблему, одновременное наличие индексов с одинаковыми полями в PK и в unique индексах одновременно. Если данных в таблице нет то это прокатывало. Если данные есть то при создании PK индекса вываливало ".... violation of PRIMARY or UNIQUE KEY constraint "PK_INDEXNAME" on table "TABLENAME".
Понятно что была допущена ошибка и нужен только один из индексов. Но стало интересно почему создание PK не прошло? По идее оба индекса независимы и хоть это не оптимально должно было бы функционировать. Таблицу проверил, повторяющихся ключей в ней нет (да и как они там могли быть если уникальный индекс уже существовал)

Спасибо.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40107978
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
Таблицу проверил, повторяющихся ключей в ней нет (да и как они там могли быть если уникальный индекс уже существовал)
UNIQUE иначе работает с нуллами, чем PK.
В сообщении об ошибке есть значения полей.
Если сборка мусора заблокирована, то дубликаты в бекверсиях\удалённых записях когда-то могли мешать проверке уникальности. Это исправлялось, но я не вижу тут точной версии FB.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40107985
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

2.5.8
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40107986
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, забыл добавить, все поля входящие в индексы как not null маркированы.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40107989
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDL:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
/******************************************************************************/
/****              Generated by IBExpert 29.10.2021 10:24:29               ****/
/******************************************************************************/

/******************************************************************************/
/****     Following SET SQL DIALECT is just for the Database Comparer      ****/
/******************************************************************************/
SET SQL DIALECT 3;



/******************************************************************************/
/****                                Tables                                ****/
/******************************************************************************/



CREATE TABLE PROALOCK (
    PRONR     VARCHAR(20) NOT NULL,
    TYP       INTEGER NOT NULL,
    ANGNR     VARCHAR(50) NOT NULL,
    S1        DOUBLE PRECISION NOT NULL,
    S2        DOUBLE PRECISION NOT NULL,
    S3        DOUBLE PRECISION NOT NULL,
    S4        DOUBLE PRECISION NOT NULL,
    S5        DOUBLE PRECISION NOT NULL,
    STUFE     INTEGER,
    UNR       INTEGER,
    USERNAME  VARCHAR(100) NOT NULL,
    DT        TIMESTAMP NOT NULL
);



/******************************************************************************/
/****                             Primary keys                             ****/
/******************************************************************************/

ALTER TABLE PROALOCK ADD CONSTRAINT PK_PROALOCK PRIMARY KEY (PRONR, TYP, ANGNR, S1, S2, S3, S4, S5);


/******************************************************************************/
/****                               Indices                                ****/
/******************************************************************************/

CREATE INDEX PROALOCK_MEUSR ON PROALOCK (PRONR, TYP, USERNAME, ANGNR, S1);
CREATE UNIQUE INDEX PROALOCK_PRIMARY ON PROALOCK (PRONR, TYP, ANGNR, S1, S2, S3, S4, S5);
CREATE INDEX PROALOCK_USRANG ON PROALOCK (PRONR, TYP, USERNAME, ANGNR);


/******************************************************************************/
/****                               Triggers                               ****/
/******************************************************************************/



SET TERM ^ ;



/******************************************************************************/
/****                         Triggers for tables                          ****/
/******************************************************************************/



/* Trigger: ETR_PROANGLOCK */
CREATE OR ALTER TRIGGER ETR_PROANGLOCK FOR PROALOCK
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
BEGIN
  post_event 'proalock';
END
^
SET TERM ; ^



/******************************************************************************/
/****                              Privileges                              ****/
/******************************************************************************/


...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40107990
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad,

а как правильно проверить заблокирована сборка мусора или нет?
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108008
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
hvlad,

а как правильно проверить заблокирована сборка мусора или нет?
Посмотреть, движется ли OST при старте тр-ции.
Или проверить наличие старой активной тр-ции, кроме read committed read only.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108014
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotun
да, забыл добавить, все поля входящие в индексы как not null маркированы.
Есс-но, иначе создание PK обломилось бы гораздо раньше.

Никогда не сравнивай на равенство double precision. Тем более 5 шт. сразу.

PS индекс PROALOCK_USRANG не нужен, он полностью продублирован индексом PROALOCK_MEUSR
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108023
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знал, что double precision можно включать в первичный ключ... это что-то невообразимое.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108033
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
это что-то невообразимое.
регулярно всплывает.
и столь же регулярно вызывает бурную реакцию окружающих.
как натрий в воду.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108039
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первичный ключ из восьми полей для меня из области фантастики. Как записи искать?
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108040
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийрегулярно всплывает.

Это в основном безопасно. Во всех языках кроме Дельфи. Аффтару очень точно
удалось найти единственные грабли посреди Сахары.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108045
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

а если надо будет эту таблицу связывать с другой? Восемь полей тащить в другую таблицу? В каких книжках пишут такие рекомендации?
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108061
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, эта тема много раз обсуждалась, но 8 полей я не припомню, да.

P.S. Я даже к PK из двух полей отношусь с подозрением, мягко говоря.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108092
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам
Ну, эта тема много раз обсуждалась, но 8 полей я не припомню, да.

P.S. Я даже к PK из двух полей отношусь с подозрением, мягко говоря.

когда то в одной конторе работал, там местный разработчик баз только составные первичные ключи использовал. Там бывало и поболее 8ми полей, ну конечно не double. Проект правда не взлетел, заказчик загнулся раньше.
Попробую разобраться зачем человек такой ключ сделал. Меня просто попросили причину ошибки найти. Я даже пока незнаю назначение этой таблицы. Из названия какой то лог.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108094
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot hlopotun#22389940]
Гаджимурадов Рустам
Ну, эта тема много раз обсуждалась, но 8 полей я не припомню, да.

P.S. Я даже к PK из двух полей отношусь с подозрением, мягко говоря.

когда то в одной конторе работал, там местный разработчик баз только составные первичные ключи использовал. Там бывало и поболее 8ми полей, ну конечно не double. Проект правда не взлетел, заказчик загнулся раньше.
Попробую разобраться зачем человек такой ключ сделал. Меня просто попросили причину ошибки найти. Я даже пока незнаю назначение этой таблицы. Из названия какой то блокировщик.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108102
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hlopotunа как правильно проверить заблокирована сборка мусора или нет?
в mon$attachments у этого коннекта столбец MON$GARBAGE_COLLECTION будет равен 0.\

индексы PROALOCK_PRIMARY и PROALOCK_USRANG надо удалить к чертям, они лишние.
Про ПК из 8 столбцов и double precision в индексе уже сказали.

Обычно, если эти 8 столбцов действительно представляют собой "идентификатор", делают так:
в таблицу вводят суррогатный ПК (числовой ID, заполняемый генератором или как IDENTITY).
На 8 столбцов вводят уникальный констрейнт (не индекс, индекс по констренту будет создан автоматом).
Но вообще уникальность по 8 столбцам - это дичь.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108103
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Ну, эта тема много раз обсуждалась, но 8 полей я не припомню, да.

P.S. Я даже к PK из двух полей отношусь с подозрением, мягко говоря.


Это из области холивара насчёт естественных и искусственных. Двухсегментные имхо вполне имеют право на жизнь по Оккаму. Скажем, архив событий невысокой интенсивности - ID сущности и таймштамп действа. Нафига там ещё создавать ID самой архивной записи. При высокой интенсивности, конечно, рано или поздно наступишь на дискретность времени. Или хранимые агретаты - ID сущности, ID периода, в атрибутах сумма и прочая считаемая фигня. Можно ещё что-нибудь вспомнить специфическое. Но в целом ноги многосегментных PK растут из времён когда деревья были большими ужасающе медленный по нынешним понятиям диск в 1Гб был вершиной технического прогресса, а ОЗУ 512Мб позволяли себе только сумасшедшие миллионеры. Приходилось экономить на спичках и не плодить "лишних" индексов. Я тогда немало всяких чудес сотворил. Потом, конечно, пришёл к целостности на ID и всей естественности даже не на UK, а просто на уникальных индексах. Но данный конкретной случай, конечно, патология.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108128
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Во всех языках кроме Дельфи.


Дельфи-то тут каким боком. Это архитектура процессора.
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108133
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggoryДельфи-то тут каким боком.

Оно "под капотом" округляет плавающие числа, отбрасывая младший бит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108134
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Оно "под капотом" округляет плавающие числа, отбрасывая младший бит.
зачем?
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108136
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийзачем?

Чтобы не пугать дельфинов граблями типа 0.2 + 0.2 <> 0.4, на которых ловятся
сишники. Учебный же язык.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108154
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

ggreggoryДельфи-то тут каким боком.

Оно "под капотом" округляет плавающие числа, отбрасывая младший бит.


Чушь какая. Кто вам такое сказал? И что такое "младший бит вещественного числа"? :D
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108176
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggoryКто вам такое сказал? И что такое "младший бит вещественного числа"? :D

Исходники. Младший бит мантиссы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
    #40108184
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

ggreggoryКто вам такое сказал? И что такое "младший бит вещественного числа"? :D

Исходники. Младший бит мантиссы.


Отбрасывание младших битов мантиссы приводит не к округлению, а к уменьшению числа. Т.е. в результате расчетов вы будете получать ДРУГОЕ число. Хотя бы из этих соображений ваш пост про младший бит - бред.

Про исходники я молчу. Как в исходниках можно что-то увидеть? увидеть можно только в бинарном коде или его ассемблерном представлении.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 2.5 одинаковые PK и UNIQUE индексы с одинаковыми полями в одной таблице одновременно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]