CREATE TABLE gd_contact
(
id dintkey,
/* Левая (верхняя) граница. Одновременно может использоваться */
/* как второй уникальный индекс, если группы и список */
/* находятся в разных таблицах */
lb dlb,
rb drb, /* Правая (нижняя) граница */
parent dparent,
contacttype daddrcontacttype, /* 0 - папка, 1 - группа, 2 - человек, 3 - клиент, 4 - подразделение, 5 - банк */
name dname, /* Імя для паказу */
address dtext60, /* Адрэс */
district dtext20,
city dtext20, /* Горад */
region dtext20, /* Вобласць */
ZIP dtext20, /* Індэкс */
country dtext20, /* Краіна */
placekey dforeignkey,
note dblobtext80_1251, /* Камэнтар */
externalkey dforeignkey,
email dtext60,
url dtext40,
pobox dtext40,
phone dtext40,
fax dtext40,
editorkey dforeignkey,
editiondate deditiondate,
afull dsecurity,
achag dsecurity,
aview dsecurity,
disabled ddisabled,
reserved dreserved
);
ALTER TABLE gd_contact ADD CONSTRAINT gd_pk_contact
PRIMARY KEY (id);
/* калі выдаляецца бацькоўскі кантакт, выдаляем і ўсіх дзяцей */
ALTER TABLE gd_contact ADD CONSTRAINT gd_fk_contract_parent
FOREIGN KEY (parent) REFERENCES gd_contact(id)
ON UPDATE CASCADE
ON DELETE CASCADE;
ALTER TABLE gd_contact ADD CONSTRAINT gd_fk_contact_placekey
FOREIGN KEY (placekey) REFERENCES gd_place (id)
ON UPDATE CASCADE;
ALTER TABLE gd_contact ADD CONSTRAINT gd_chk_contact_contacttype
CHECK(contacttype IN (0, 1, 2, 3, 4, 5, 100, 101, 102, 103));
ALTER TABLE gd_contact ADD CONSTRAINT gd_chk_contact_parent
CHECK((contacttype IN (0, 1)) OR (NOT (parent IS NULL)));
ALTER TABLE gd_user ADD CONSTRAINT gd_fk_user_contactkey
FOREIGN KEY (contactkey) REFERENCES gd_contact (id)
ON UPDATE CASCADE;
ALTER TABLE gd_contact ADD CONSTRAINT gd_fk_contact_editorkey
FOREIGN KEY (editorkey) REFERENCES gd_contact(id)
ON UPDATE CASCADE;
CREATE ASC INDEX gd_x_contact_name ON gd_contact (name);