|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Подстановочные поля
Здравствуйте
Прошу сильно меня не ругать, и не просить "учить матчасть" ибо обращаюсь я к вам, от безнадёжья и после прочтения массы форумов и нескольких книг по БД. В БД я совсем новичок. Имеется связь таблиц Paradox: Расписание <- группа -> дисциплины <- Преподаватели Подскажите пожалуйста, как создать в таблице Расписание подстановочное поле из таблицы Преподаватели'PrepodName'. Из таблицы Дисциплины я смогла подставить значения. А вот соответствующего Дисциплине Преподавателя подставить ну никак не выходит! И ещё один вопрос, как мне ограничить добавление строк в набор данных для Расписания (использую DBNAVIGATOR) количеством предметов для данной группы? (т.е. количество записей в Расписании для Группы1 должно совпадать с количеством Дисциплин, преподаваемых в Группе1) Спасибо, что подарили мне ваше время. |
#2
|
|||
|
|||
Попробую помочь. Но предлагаю все- таки не 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; |
Этот пользователь сказал Спасибо chainik за это полезное сообщение: | ||
Sofia Guseva (26.12.2011)
|
#3
|
||||
|
||||
Большое спасибо
А с помощью FieldsEditor как это осуществить? |