Quantcast
Channel: SQL.ru: Firebird, InterBase
Viewing all articles
Browse latest Browse all 1677

Как правильно обработать синонимы

$
0
0
Всем добрый день.
Выполняю задачу по подготовке БД к слиянию. Есть 6 БД - хотим получить 1
Есть в базе справочник улиц.
+

CREATE TABLE KLU (
    BD       SMALLINT NOT NULL,
    CODE     SMALLINT NOT NULL,
    OBL      SMALLINT,
    RAJ      SMALLINT,
    ADR      SMALLINT,
    VUL_COD  SMALLINT,
    VUL_CAT  SMALLINT,
    NAME     VARCHAR(50),
    NAM1     VARCHAR(5),
    NAM2     VARCHAR(25));

ALTER TABLE KLU ADD CONSTRAINT PK_KLU PRIMARY KEY (BD, CODE);


Данные для перекодировки делаю с так называемой эталонной базой (BD=0)
Есть ХП которая выбирает уникальные значения по полям OBL, ADR, VUL_CAT, NAME
+

create or alter procedure ETALON_KLU
returns (
    BD       SMALLINT,
    CODE     SMALLINT,
    OBL      SMALLINT,
    RAJ      SMALLINT,
    ADR      SMALLINT,
    VUL_CAT  SMALLINT,
    NAME     VARCHAR(50))
AS
declare variable L_CODE integer = 0;
BEGIN
  FOR
      SELECT distinct OBL,ADR,VUL_CAT,upper(NAME)
        FROM klu
        order by upper(name)
        INTO: OBL,ADR,VUL_CAT,NAME
    DO
      BEGIN
        bd=0;
        raj=49;
        l_code=l_code+1;
        CODE=l_code;
        SUSPEND;
      END
END


Небольшой кусочек данных:
+
Разный регистр
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (1,183,12,1,0,197,1, '25-РIЧЧЯ ЖОВТНЯ','25-РI','ЧЧЯ ЖОВТНЯ');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (3,113,12,49,0,197,1,'25-рiччя жовтня','25-рi','ччя жовтня');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (1,184,12,1,0,1776,1,'40-РIЧЧЯ ЖОВТНЯ','40-РI','ЧЧЯ ЖОВТНЯ');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (3,1,12,49,0,1776,1, '40-рiччя жовтня','40-рi','ччя жовтня');

Синонимичные названия
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (6,191,12,1,0,,1,   'БАТУРИНСКАЯ','БАТУР','ИНСКАЯ');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (2,23, 12,1,0,,1,   'БАТУРИНСКАЯ','БАТУР','ИНСКАЯ');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (3,23,12,1,0,127,1, 'БАТУРИНСЬКА','БАТУР','ИНСЬКА');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (5,191,  12,1,0,,1, 'БАТУРИНСЬКА','БАТУР','ИНСЬКА');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (1,194,12,1,0,127,1,'БАТУРИНСЬКА','БАТУР','ИНСЬКА');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (4,191,12,1,0,,1,   'БАТУРИНСЬКА','БАТУР','ИНСЬКА');

INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (4,195,12,1,0,,1,   'БАШКIРСЬКА','БАШКI','РСЬКА');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (5,195,12,1,0,,1,   'БАШКIРСЬКА','БАШКI','РСЬКА');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (6,195,12,1,0,,1,   'БАШКИРСКАЯ','БАШКИ','РСКАЯ');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (2,105,12,1,0,,1,   'БАШКИРСКАЯ','БАШКИ','РСКАЯ');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (3,105,12,1,0,488,1,'БАШКИРСЬКА','БАШКИ','РСЬКА');
INSERT INTO KLU (BD, CODE, OBL, RAJ, ADR, VUL_COD, VUL_CAT, NAME, NAM1, NAM2) VALUES (1,197,12,1,0,488,1,'БАШКИРСЬКА','БАШКИ','РСЬКА');


Как победить разный регистр в поле NAME я придумал, написал upper(NAME).
Но осталась еще одна проблема:
Есть названия на разных языках - русский и украинский.
Так как работа не стоит, а люди продолжают работать с БД хочу все подготовить и в последний момент обновить таблицы перекодировок.
Чуть позже будет добавлено поле NEW_CODE с новым кодом для старых названий, пока вопрос получить правильную эталонную базу

Посоветуйте: Если сделать таблицу синонимов - можно ли в ХП встроить подбор
Могу сделать таблицу синонимов (вручную), но не понимаю как потом ее прикрутить к ХП.

--------------------------
Firebird 3.0.1.32609;
IBExpert 2017.2.7.1
Windows 10 32-bit;
4Gb RAM;
SSD 512Mb + HDD 1 Tb;
Настройки по умолчанию

Viewing all articles
Browse latest Browse all 1677

Trending Articles