Показать сообщение отдельно
  #2  
Старый 25.12.2011, 20:43
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

Попробую помочь. Но предлагаю все- таки не Paradox (скорее бы он умер!) а
все- таки что- нибудь посерьезней. Например Firebird
Здесь я набросал БД (наспех)
Суть вот в чем
БД содержит таблицы
-Список преподавателей
-Список дисциплин
-таблицу связи где указано какой преподаватель какую дисциплину преподает
Причем 1 преп может преподавать несколько дисципл. и обратно- одну дисц
могут преподавать разные преподы (те связь Многие- с многими)
-и наконец таблицу расписания
В примитивном случае можно отказаться от табл преподавателей и дисциплин
оставив только табл связи.
Но это полностью лишит тебя возможности доработок программы.

Ну и конечно до нового года не успеть. Если это не поздно- пиши. Сделаю.
Код:
/*****************************************************
    База данных программы Nikonov
    по заказу Никонова
******************************************************/


SET AUTODDL ON;
SET ECHO ON;
OUTPUT isql.txt;

CONNECT 'Nikonov.fdb'
USER 'sysdba' PASSWORD 'masterkey';
DROP DATABASE;
COMMIT;

SET NAMES WIN1251;
SET SQL DIALECT 3;
CREATE DATABASE 'Nikonov.fdb'
USER 'sysdba' PASSWORD 'masterkey'
DEFAULT CHARACTER SET WIN1251;
COMMIT;

CONNECT 'Nikonov.fdb'
USER 'sysdba' PASSWORD 'masterkey';





/***************************************************
        Список преподавателей
****************************************************/
CREATE TABLE Prepods (
    Tabnum INTEGER NOT NULL,           /* таб номер */
    Fam VARCHAR(50) NOT NULL,    /* фамилия препода */
    Sex CHAR(1),           /* пол */
    PRIMARY KEY(Tabnum)
    );

/***************************************************
        Дисциплины
****************************************************/
CREATE TABLE Diszipls (
    Naimen VARCHAR(20) NOT NULL,           /* наименование дисциплины первичный ключ */
    Chasov INTEGER,                         /* объем курса в часах */
    Auditoria VARCHAR(20),                  /* аудитория */
    PRIMARY KEY(Naimen)
    );

/***************************************************
        Таблица связи
****************************************************/
CREATE TABLE Sootv (
    NN INTEGER NOT NULL,        /* первичный ключ */
    Tabnum INTEGER NOT NULL,           /* таб номер */
    Naimen VARCHAR(20) NOT NULL,           /* наименование дисциплины первичный ключ */
    CONSTRAINT Tabnum_FK FOREIGN KEY (Tabnum) REFERENCES Prepods(Tabnum) ON DELETE CASCADE,
    CONSTRAINT Naimen_FK FOREIGN KEY (Naimen) REFERENCES Diszipls(Naimen) ON DELETE CASCADE,
    PRIMARY KEY(NN)
    );

CREATE GENERATOR Sootv_NN_GEN;
SET GENERATOR Sootv_NN_GEN TO 0;


/***************************************************
        Расписание
****************************************************/
CREATE TABLE Raspisanie(
    NN INTEGER NOT NULL,        /* первичный ключ */
    NN_Sootv INTEGER,      /* внешний ключ связи с таблицей соответствия */
    Dat DATE,                   /* дата занятий */
    CONSTRAINT Raspisanie_FK FOREIGN KEY (NN_Sootv) REFERENCES Sootv(NN) ON DELETE CASCADE,
    PRIMARY KEY(NN)
    );

CREATE GENERATOR Raspisanie_NN_GEN;
SET GENERATOR Raspisanie_NN_GEN TO 0;


SET TERM !;

/**********************************************
    Генераторы первичных ключей
***********************************************/
------------------------------------------------------- */
    CREATE TRIGGER Raspisanie_trig FOR Raspisanie
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.NN=GEN_ID(Raspisanie_NN_GEN,1);
END!

    CREATE TRIGGER Sootv_trig FOR Sootv
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.NN=GEN_ID(Sootv_NN_GEN,1);
END!


/***********************************************
        Начальная инициализация
************************************************/
SET TERM ;!

COMMIT;
Ответить с цитированием