Здравствуйте!
Имею таблицу Людей:
CREATE TABLE PEOPLES (
ID_PEOPLE PRIMARY_KEY NOT NULL /* PRIMARY_KEY = INTEGER NOT NULL */,
FIO FIO NOT NULL /* FIO = VARCHAR(80) */,
BIRTH_DAY DATE_YESNULL /* DATE_YESNULL = DATE CHECK (value <= current_date or value is null) */,
ADRES ADRES /* ADRES = VARCHAR(50) */
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE PEOPLES ADD CONSTRAINT PK_PEOPLES PRIMARY KEY (ID_PEOPLE);
В ней раньше были логические поля которые определяли социальный статус. Меня попросили добавить ещё некоторые категории соц. статуса, потом ещё, тут я решил, что бы не менять каждый раз структуру БД, лучше заведу отдельную табличку соц. статусов:
CREATE TABLE SOC_GROUPS (
ID_SOC_GR PRIMARY_KEY NOT NULL /* PRIMARY_KEY = INTEGER NOT NULL */,
SOC_GR VARCHAR(50) NOT NULL
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE SOC_GROUPS ADD CONSTRAINT PK_SOC_GROUPS PRIMARY KEY (ID_SOC_GR);
и ещё одну табличку для связи 1 ко многим с людьми:
CREATE TABLE P_SOC_GR (
PEOPLE_ID FOREIGN_KEY_NOTNULL NOT NULL /* FOREIGN_KEY_NOTNULL = INTEGER NOT NULL */,
SOC_GR_ID FOREIGN_KEY_NOTNULL NOT NULL /* FOREIGN_KEY_NOTNULL = INTEGER NOT NULL */
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE P_SOC_GR ADD CONSTRAINT PK_P_SOC_GR PRIMARY KEY (PEOPLE_ID, SOC_GR_ID);
/******************************************************************************/
/*** Foreign Keys ***/
/******************************************************************************/
ALTER TABLE P_SOC_GR ADD CONSTRAINT FK_P_SOC_GR_PEOPLES FOREIGN KEY (PEOPLE_ID) REFERENCES PEOPLES (ID_PEOPLE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE P_SOC_GR ADD CONSTRAINT FK_P_SOC_GR_SOC_GROUPS FOREIGN KEY (SOC_GR_ID) REFERENCES SOC_GROUPS (ID_SOC_GR) ON UPDATE CASCADE;
После этого встала проблема, если есть к примеру социальный статус "Гражданский брак" и "Официальный брак", то как мне сделать так, чтобы можно было только одно из этих занести в таблицу P_SOC_GR? Сейчас вот нашел вариант сделать в справочнике соц. статусов ещё одно поле, где будут по категориям соц. статусы разбиты, но что-то не пойму как мне всё это цепануть грамотно к P_SOC_GR? Может вообще структура корявая?