| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Связывание таблиц в базе данных Access |
| Автор: Letion 3.1.2010, 23:28 |
| Здравствуйте, профессионалы! У меня такая проблема - пишу программу, в которой БД создана в формате Access. В этой базе данных три таблицы - список фамилий (dannue), предметы (dizsiplina) и оценки (ozenka). Цель программы - чтобы для каждой фамилии можно было вводить свой список предметов, а по каждому предмету - свой список оценок. Подскажите, пожалуйста! Как между собой связать эти таблицы? Бьюсь уже который день! У меня получается, что список предметов и оценок одинаков для любой фамилии! Но так ведь не должно быть |
| Автор: chip_and_dayl 4.1.2010, 00:13 |
| Вот такого плана Таблица предмет содержит собственно код предмета и название. Таблица Фамилий, содержит идентификатор фамилии и собственно фамилию. Таблица Sv содержит связи между таблицей фамилий и названий предметов: Первое поле идентификатор с таблицы Фамилий, второе идентификатор с таблицы предметов, третье поле служит для идентификации оценок (тип счетчик) Таблица Sv2 содержит связь между предметами и оценками. Первое поле это идентификатор Предмета Студента, второе поле собственно оценка по предмету Добавлено через 11 минут и 28 секунд Хотя если оценка по предмету будет одна, то таблицу Sv2 можно убрать, а поле ssID в таблице Sv нужно заменить на sBal |
| Автор: Letion 4.1.2010, 12:25 |
| chip_and_dayl! Это нужно делать программно (программу создаю на Делфи) или в приложении Access? |
| Автор: Данкинг 4.1.2010, 12:45 |
| Letion, судя по скрину chip_and_dayl'а, там определённо Access. |
| Автор: Letion 4.1.2010, 14:30 | ||
Дайте, пожалуйста, ссылки на литературу или страницы по связыванию таблиц Access! Просто никогда этим не занимался! Спасибо! |
| Автор: Данкинг 4.1.2010, 14:33 |
| Letion, какую литературу по связыванию? |
| Автор: chip_and_dayl 4.1.2010, 17:04 |
| Таблицу лучше создать в Accesse, зачем мучатся или извращаться!?! А саму логику работы, создание записей, редактирование и т.д., писать в Делфи. По поводу связей, я любитель все сам контролировать, поэтому на уровне СУБД (Аксесс) не связываю таблицы. Уже на программном уровне пытаюсь писать так, чтобы целостность связей была собственно целая. Ну, я так понял, что под связыванием таблиц, ты имел ввиду как все три таблицы вывести как одну без всяких ключевых полей!?! Добавлено через 3 минуты и 26 секунд Данкинг Я б не удивился, если бы еще версию Аксеса назвал:) |
| Автор: Letion 5.1.2010, 12:45 |
Извините за задержку ответа - инет барахлил. Вот что у меня получилось: Не знаю, правильно ли соединил. Все равно что-то не то. Вот ссылка на саму мою базу данных: http://rubynoid.org.ua/db1.mdb В этой базе данных три таблицы - список фамилий (dannue), предметы (dizsiplina) и оценки (ozenka). Цель программы - чтобы для каждой фамилии можно было вводить свой список предметов, а по каждому предмету - свой список оценок. То есть, к примеру, для Ивановой - свои предметы: математика, английский, история. По математике чтобы стояли свои оценки, к примеру: 33333. Для английского свои:4455. Для истории, к примеру: 5555.Для Примова, к примеру, свои предметы: алгебра, геометрия, рус.язык. По алгебре: 3344, по геометрии: 4444, по рус. языку: 5554. И так далее по всем фамилиям. У меня же получается, что добавляемые предметы высвечиваются не по одной фамилии, а по всем фамилиям, т. е. становятся общими. То же самое и с оценками. Добавляю, к примеру 445533 - эти же оценки высвечиваются по всем предметам. как быть? Что не так делаю? Спасибо! |
| Автор: chip_and_dayl 5.1.2010, 15:45 |
| Глядя на связи, можно сказать, что там все не так:) |
| Автор: Letion 5.1.2010, 15:48 | ||
Что именно? |
| Автор: chip_and_dayl 5.1.2010, 15:49 |
| Таблица Данные и Дисциплина должны быть связаны по ключевому полю (кеу1 в таблице Данные и кеу1 в таблице Дисциплина), а что мы видим? А мы видим... даже не знаю как это назвать. Добавлено через 57 секунд Тоже касается таблица Оценки и Дисциплина Добавлено через 4 минуты и 9 секунд И при той структуре, что ты сделал, выходит избыточность, то есть предмет "Математика" будет создан столько раз, у скольких студентов этот предмет есть, вместо того, чтобы предмет и связи держать в отдельной таблице Добавлено через 5 минут и 19 секунд В этом случае, ты раз занес предметы в базу, и уже при создание нового студента ты ему выбираешь предметы, которые у него есть, а не создаешь новый предмет с тем же название для каждого студента |
| Автор: Letion 5.1.2010, 16:17 | ||
Спасибо за подсказку! Сейчас попробую. Добавлено через 5 минут и 47 секунд То есть обязательно добавить промежуточные таблицы? Добавлено через 6 минут и 44 секунды Как на том рисунке, что Вы мне давали? |
| Автор: chip_and_dayl 5.1.2010, 16:31 |
Ну, если хотим предмет, например, "Математика" вводить 200 раз, вместо одного, то дополнительная таблица не нужна. Иначе ее нужно создать. Лучше все создать как я показал. В этом случае база хранит то что нужно и ничего лишнего (хотя таблицу с именем Sv2 можно и убрать, только в этом случае в таблицу Sv нужно перенести поле ОЦЕНКА) |
| Автор: Letion 5.1.2010, 18:33 |
Вот что у меня получилось: По ходу также, как и на Вашем рисунке? |
| Автор: chip_and_dayl 5.1.2010, 18:50 |
| Letion Не походу, а точно как на моем скрине :) Добавлено через 2 минуты и 24 секунды Теперь нужно писать логику работы программы на Делфи. Связывание таблиц, точнее вывод всего этого добра в единой таблице делается через запрос на обьединение Добавлено через 11 минут и 25 секунд Да, наверно все-таки поле ozenka стаблицы Оценка перенести в таблицу Пр, и тогда таблицу Оценка можно удалить |
| Автор: Letion 5.1.2010, 19:02 | ||||
А запрос на объединение как делается? Добавлено через 1 минуту и 21 секунду Или подробное описание? Голова совсем уже не работает Добавлено через 5 минут и 12 секунд
Тоже так считаю, что оценку нужно перенести, чтобы меньше путаницы было. Сейчас сделаю. И как Вы в этом разбираетесь? |
| Автор: chip_and_dayl 5.1.2010, 19:32 |
или через inner join или через более понятный способ (для начинающих познавать sql) - Таблица1.ПолеПоКоторомИдетСвязьсТаблицей2=Таблица2.ПолеПоКоторомИдетСвязьсТаблицей1 подробнее http://www.sql.ru/docs/sql/u_sql/ch8.shtml Практика и только практика. А вообще это еще мелочи:) |
| Автор: Letion 5.1.2010, 20:55 | ||
Да уж! Тут работы, вижу - непочатый край! Спасибо, chip_and_dayl, за помощь! |
| Автор: chip_and_dayl 5.1.2010, 21:00 |
| Пожалуйста) Добавлено через 1 минуту и 41 секунду Да и знания СКЛ-запросов пригодится. Без него сейчас никуда |
| Автор: Letion 6.1.2010, 18:52 | ||
Хотел еще спросить - inner join - что это такое? И sql-запросы можно делать не программно, а через Access? Спасибо! |