Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Подогнать под 3НФ


Автор: zhenya1 8.12.2011, 22:48
Здравтвуйте, есть такая проблемка:
У меня есть есть "БД" и сервер, который с ней и работает.
БД содержит 7 табличек с одинаковыми полями, но разными названиями.(см.ниже). На сервере я, в зависимости от выбраной таблички, скажем, посылаю запрос для заполнения всех её полей и т.д.
Но вся проблема в том, что они никак между собой не связаны, а код вроде как уже написан. Как можно сделать осмысленные связи между ними, чтобы я по прежнему мог работать с ними как раньше?!

Код

CREATE TABLE APP.RESPONSIBILITY (
DOCUMENTNAME VARCHAR(45),
 AGENCYNAME VARCHAR(65),
 CLIENTNAME VARCHAR(76) ,
PASPORTNUMBER INT,
 OBJECTNAME VARCHAR(65),
 SUMINSURED INT,
 INSURANCERISK VARCHAR(65),
 INSURANCEVZNOS INT, 
INSURANCETIMEACTIVITY DATE,
INSURANCETIMEACTIVITYFINAL DATE,
 DOCUMENTNUMBER INT NOT NULL,
CONFIRMDOCUMENT VARCHAR(65),
INSURANCEPAYMENT INT,
DATEPAYMENT DATE,
 PRIMARY KEY (DOCUMENTNUMBER )
);


Код

CREATE TABLE APP.CARGO (
DOCUMENTNAME VARCHAR(45),
 AGENCYNAME VARCHAR(65),
 CLIENTNAME VARCHAR(76) ,
PASPORTNUMBER INT,
 OBJECTNAME VARCHAR(65),
 SUMINSURED INT,
 INSURANCERISK VARCHAR(65),
 INSURANCEVZNOS INT, 
INSURANCETIMEACTIVITY DATE,
INSURANCETIMEACTIVITYFINAL DATE,
 DOCUMENTNUMBER INT NOT NULL,
CONFIRMDOCUMENT VARCHAR(65),
INSURANCEPAYMENT INT,
DATEPAYMENT DATE,
 PRIMARY KEY (DOCUMENTNUMBER )
);


 и т.д.

Автор: LSD 9.12.2011, 11:40
Цитата(zhenya1 @  8.12.2011,  23:48 Найти цитируемый пост)
Но вся проблема в том, что они никак между собой не связаны, а код вроде как уже написан. Как можно сделать осмысленные связи между ними, чтобы я по прежнему мог работать с ними как раньше?!

Что значит "как раньше"? Добавить ссылочную целостность не большая проблема, но если программа при вставке данных, не соблюдает ее, то работать ничего не будет.

Автор: zhenya1 9.12.2011, 16:32
Можно ли сделать вот по такой схемке?! (см.ссылку)

http://s2.ipicture.ru/uploads/20111209/LGT4TJ24.png


Автор: LSD 9.12.2011, 16:36
Я не могу понять связь полей в старом варианте и новом, какое в какое должно перейти.

Автор: zhenya1 9.12.2011, 16:49
В страром варианте  не было связей , а было 7 независимых табличек с одинаковыми, по названию, полями.

Автор: LSD 9.12.2011, 17:00
Где в старых таблицах НаименованиеВидаСтрахования?

Добавлено через 2 минуты и 6 секунд
В любом случае что можно сделать легко: 
- разбить данные на несколько таблиц
- воссоздать старую структуру с помощью view

С модвификацией данных сложней. Если база позволяет, можно загнать всю необходимую логику в триггер. Если нет, то придется менять клиента.

Автор: zhenya1 9.12.2011, 17:07
Буду пробывать. Спасибо за внимание!

Автор: Zloxa 9.12.2011, 17:09
Цитата(LSD @  9.12.2011,  17:00 Найти цитируемый пост)
загнать всю необходимую логику в триггер

Это тоже может потребовать модификации клиента. Не все операции над таблами аналогичны для вьюх.

Автор: LSD 9.12.2011, 17:24
Цитата(Zloxa @  9.12.2011,  18:09 Найти цитируемый пост)
Это тоже может потребовать модификации клиента. Не все операции над таблами аналогичны для вьюх. 

Честно говоря, не вижу в данном примере, таких операций которые бы нельзя было бы реализовать instead of тригером.

Автор: Zloxa 9.12.2011, 19:23
LSD, я не о том, что нельзя. Я не раз подменял таблы вьюхами, но, зачастую, доводилось и обламываться, затрагивать и клиентскую часть.     Точно не припомню что именно не получилось и при каких условиях, но вроде как мержи  переставали во вьюху работать, for update накинуть не удавалось, rowid забрать. Т.е. таки не все, что можно сделать с таблой, можно сделать и со вьюхой. И таких случаев, к сожалению, в моей практике в достатке. Так, что если таки удастся не затрагивать клиента, я полагаю это почитай повезло.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)