Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2012, 16:32   #1
SashaS
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 40
По умолчанию Таблица с двумя внешними ключами

Здравствуйте. Работа на SQL сервере.
Я проектирую бд по типу школьный журнал на год.
Одна страница(за один день) выглядит так-строки ученики, столбцы предмет. В ячейках оценка за текущий день.
Таких страниц столько-же, сколько дней в году. То есть фактически такая страница формируется каждый день и в итоге в моей бд 365 страниц.

Для одной странице я имею :
1ая таблица Students- FIO и id_student(primary key)
2ая таблица Discp-Disciplin и id_disp(primary key)

Мой первый вопрос-как должна выглядеть третья таблица в которой будут храниться оценки, я так полагаю что в ней должны быть три поля- id_student(foreign key), id_disp(foreign key), и ocenka. Но ведь надо чтобы это комбинация внешних ключей была уникальна, и я не знаю как это сделать. Если можете подскажите или покажите как написать запрос CREATE TABLE для данной таблицы.

Второй вопрос. Надо наверное создать таблицу с датами, и как-то связать её с другими таблицами, пока не представляю как, подскажите пожалуйста тоже. Как формировать запрос по выводу текущей страницы журнала на экран, видимо надо объединять таблицы?

Третий вопрос-как формировать запрос, если я например хочу посчитать ср ариф за месяц и вывести на экран, тут наверное надо специальным образом создавать таблицу с Датами.


Если Вы знаете то подскажите как это сделать пожалуйста.
Спасибо!
SashaS вне форума Ответить с цитированием
Старый 12.04.2012, 20:56   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А почему бы не сделать примерно так:

Таблица оценок, дочерняя по отношению к таблицам студентов и дисциплин

id_Record primary key
id_Studetn
id_Disciplin
Ocenka
Data

Таблица студентов Students

id_Studetn primary key
FIO

Таблица дисциплин Discp

id_Disciplin primary key
Disciplin

И собирать данные с ней в любых разрезах, в т.ч. и как страниц журнала
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.04.2012, 21:35   #3
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Цитата:
id_Record primary key
Не надо перенасыщать сущностями.
Праймари по id_Studetn + id_Disciplin вполне хватит.
Цитата:
Надо наверное создать таблицу с датами
нет, не надо.
Цитата:
Как формировать запрос по выводу текущей страницы журнала на экран
Текущая, значит сегодня? вот вам и условие.
Цитата:
тут наверное надо специальным образом создавать таблицу с Датами.
да чтож вам эти даты покоя не дают.
Вот таблица, у Аватар, поможет вам во всем перечисленном.
=master= вне форума Ответить с цитированием
Старый 12.04.2012, 21:43   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Праймари по id_Studetn + id_Disciplin вполне хватит
Очень не достаточно. Много оценок по разным датам у одного студента по одному предмету Даже по одной дате у студента по одному предмету почему бы не быть нескольким оценкам

Создать можно так
Код:
CREATE TABLE Estimation
    (id_Record int NOT NULL,
     id_Studetn int NOT NULL,
     id_Disciplin int NOT NULL,
     Ocenka tinyint NOT NULL,
     Data datetime NOT NULL)
go

ALTER TABLE Estimation ADD PRIMARY KEY (id_Record)
go

ALTER TABLE Estimation ADD FOREIGN KEY (id_Studetn) REFERENCES Students
go

ALTER TABLE Estimation ADD FOREIGN KEY (id_Disciplin) REFERENCES Discp
go
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 12.04.2012 в 22:00.
Аватар вне форума Ответить с цитированием
Старый 12.04.2012, 22:58   #5
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Цитата:
Очень не достаточно
Это совдеп. Но даже если и так, то всегда есть дата, нельзя получить оценку прям секунда в секунду, чисто физически в журнал не запишите.
=master= вне форума Ответить с цитированием
Старый 12.04.2012, 23:05   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Это совдеп
Желательно расшифровочку

Ну у меня бывало, что на одной паре получал и двойку и пятерку. Как там уж препод их в журнал ставил Ну не вводить же время в дату занятия?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.04.2012, 01:13   #7
=master=
Форумчанин
 
Регистрация: 26.03.2012
Сообщений: 665
По умолчанию

Да помню, так это в уголках маленкими чиферками (у нас так было). Смех да и только.
А вообще за бугром такое не приветствуется, сразу подозрения, мол учитель с одним занимался на уроке, а другие в потолок плевали, ох и не нравицца им за это дело еще иногда и кровные отдавать. Кому надо нанимай индивидуально.
=master= вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой прогой открыть файлы с ключами KIS bulit Общие вопросы C/C++ 5 07.08.2010 22:48
Работа с внешними приложениями! >>arty<< Помощь студентам 9 10.11.2009 17:57
Работа с ключами и сертификатами в Delphi MagomedAina Общие вопросы Delphi 7 19.03.2009 12:45
Работа с внешними данными Askar_g Общие вопросы Delphi 1 26.12.2008 10:36
Алгоритм обмена ключами Диффи-Хеллмана Victor1987 Помощь студентам 0 04.12.2007 01:19