Связи таблиц справочника контактов
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) (→Восстановление целостности данных справочника контактов) |
||
| (не показаны 4 промежуточные версии 1 участника) | |||
| Строка 1: | Строка 1: | ||
| − | Связи между таблицами [[GD_CONTACT]], [[GD_PEOPLE]], [[GD_COMPANY]] и др. | + | Связи между таблицами [[GD_CONTACT]], [[GD_PEOPLE]], [[GD_COMPANY]], [[GD_COMPANYCODE]], [[GD_COMPANYACCOUNT]], [[GD_BANK]] и др. |
http://gsbelarus.com/gs/images/gs/2007/wiki_contact_tables.png | http://gsbelarus.com/gs/images/gs/2007/wiki_contact_tables.png | ||
| + | |||
| + | ====Восстановление целостности данных справочника контактов==== | ||
| + | |||
| + | При работе с данными в базе напрямую (минуя бизнес-классы) возможно нарушение структуры справочника контактов. Например, в таблице [[GD_CONTACT]] присутствует запись с '''CONTACTTYPE = 3''', а в таблице [[GD_COMPANY]] связанная с ней запись отсутствует. Восстановить порядок можно поочередно выполнив следующие запросы: | ||
| + | |||
| + | 1 -- восстанавливаем отсутствующие записи в таблице GD_COMPANY для организаций и банков: | ||
| + | |||
| + | INSERT INTO gd_company (contactkey, fullname) | ||
| + | SELECT c.id, c.name | ||
| + | FROM gd_contact c LEFT JOIN gd_company co | ||
| + | ON c.id = co.contactkey | ||
| + | WHERE | ||
| + | c.contacttype IN (3, 5) AND co.contactkey IS NULL | ||
| + | |||
| + | 2 -- восстанавливаем отсутствующие записи в GD_BANK для банков: | ||
| + | |||
| + | INSERT INTO gd_bank (bankkey, bankcode) | ||
| + | SELECT c.id, c.id | ||
| + | FROM gd_contact c LEFT JOIN gd_bank b | ||
| + | ON c.id = b.bankkey | ||
| + | WHERE | ||
| + | c.contacttype = 5 AND b.bankkey IS NULL | ||
| + | |||
| + | 3 -- восстанавливаем отсутствующие записи в GD_PEOPLE для физических лиц: | ||
| + | |||
| + | INSERT INTO gd_people (contactkey, surname) | ||
| + | SELECT c.id, SUBSTRING(c.name FROM 1 FOR 20) | ||
| + | FROM gd_contact c LEFT JOIN gd_people p | ||
| + | ON c.id = p.contactkey | ||
| + | WHERE | ||
| + | c.contacttype = 2 AND p.contactkey IS NULL | ||
| + | |||
| + | После выполнения следует зайти в редактирование проблемных объектов и ввести/исправить недостающую информацию. | ||
[[Category:База данных]] | [[Category:База данных]] | ||
Текущая версия на 16:54, 4 октября 2012
Связи между таблицами GD_CONTACT, GD_PEOPLE, GD_COMPANY, GD_COMPANYCODE, GD_COMPANYACCOUNT, GD_BANK и др.
[править] Восстановление целостности данных справочника контактов
При работе с данными в базе напрямую (минуя бизнес-классы) возможно нарушение структуры справочника контактов. Например, в таблице GD_CONTACT присутствует запись с CONTACTTYPE = 3, а в таблице GD_COMPANY связанная с ней запись отсутствует. Восстановить порядок можно поочередно выполнив следующие запросы:
1 -- восстанавливаем отсутствующие записи в таблице GD_COMPANY для организаций и банков:
INSERT INTO gd_company (contactkey, fullname) SELECT c.id, c.name FROM gd_contact c LEFT JOIN gd_company co ON c.id = co.contactkey WHERE c.contacttype IN (3, 5) AND co.contactkey IS NULL
2 -- восстанавливаем отсутствующие записи в GD_BANK для банков:
INSERT INTO gd_bank (bankkey, bankcode) SELECT c.id, c.id FROM gd_contact c LEFT JOIN gd_bank b ON c.id = b.bankkey WHERE c.contacttype = 5 AND b.bankkey IS NULL
3 -- восстанавливаем отсутствующие записи в GD_PEOPLE для физических лиц:
INSERT INTO gd_people (contactkey, surname) SELECT c.id, SUBSTRING(c.name FROM 1 FOR 20) FROM gd_contact c LEFT JOIN gd_people p ON c.id = p.contactkey WHERE c.contacttype = 2 AND p.contactkey IS NULL
После выполнения следует зайти в редактирование проблемных объектов и ввести/исправить недостающую информацию.