Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 8

Как правильно построить таблицы преподаватель-труд

26.04.2010, 22:57. Показов 2124. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стоит следующая задача: нужно создать часть базы данных в которой будет храниться информация по преподавателям, что работают на кафедре и их трудам. Труды у преподавателя могут быть как выданные на кафедре так и вне ее, но должны быть все в базе. Кроме того, труд могут писать несколько преподавателей, которые как работают на кафедре, так и левые совсем. Информацию про левых хранить не надо. Сразу думал делать это все через 3 таблицы, типа как связь многое ко многим, но как сказали, что не должна хранится информация о левых преподах - все обламалось. Остается создавать поле в таблице с трудами, и туда через запятую вводить преподов. Будет ли это рационально и как потом мне делать выборки по трудам на преподов, что на кафедре работают? Подскажите пожалуйста как правильно поступить в данной ситуации.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2010, 22:57
Ответы с готовыми решениями:

Как правильно построить связанные таблицы SQLite в C#?
Требуется построить связанные таблицы таким образом, чтобы поле supplierProductID было ссылкой на переменное количество записей в...

Как правильно построить ИНЕР, где данные в одну таблицу берутся из одной таблицы?
SELECT ROW_NUMBER() over (ORDER BY . ASC) , Единица1, Валюта., Единица2, Валюта. FROM INNER JOIN Валюта ON Валюта.ИД IN...

Капитал воспроизводит труд или труд воспроизводит капитал, то есть во что выгодно инвестировать в капитал или в труд?
Капитал воспроизводит труд или труд воспроизводит капитал, то есть во что выгодно инвестировать в капитал или в труд?

4
 Аватар для SunDrop
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
27.04.2010, 00:54
Таблица преподаватели
Таблица труды
и таблица связка преподаватели к трудам.

И не важно хранятся там левые преподаватели или нет. А "создавать поле в таблице с трудами, и туда через запятую вводить преподов" - это нарушение первой нормальной формы, потом проблем будет выше крыши. Просто пример: "Вывести все труды Иванова".
Когда три таблицы - один запрос со связкой по внешнему ключу, когда поля через запятую - LIKE '%Иванов%' по полю, что приводит к полному сканированию таблицы (тут индексы работать не будут)
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 8
28.04.2010, 21:58  [ТС]
Понятно что будет нарушение 1НФ, но вопрос в том, что работ впринцыпе немного, до 1000 где-то в будущем, сейчас и того меньше, а проблем с наполнением гораздо меньше, потому что просят чтоб процес заполнения таблицы трудом произошел как можно проще, то есть вставил туда строку и оно давай разбивать, а если придерживатсся 1НФ, то прийдется потом както для каждого вводимого труда выбирать с списка преподов и тд..
0
 Аватар для SunDrop
390 / 229 / 11
Регистрация: 09.12.2009
Сообщений: 668
29.04.2010, 01:28
Цитата Сообщение от nark03 Посмотреть сообщение
а если придерживатсся 1НФ, то прийдется потом както для каждого вводимого труда выбирать с списка преподов
Ты даже не представляешь себе насколько это просто (выборка со связкой двух таблиц) и даже не представляешь, какие могут быть проблемы, если все держать в одной строке.

Типичная задача: удалить Иванова со всех трудов. Или удалить Иванова с определенных трудов. Или Петрова сменила фамилию на Иванова и.т.д. Тут нужно шерстить всю таблицу и простыми запросами это сделать или сложно или нереально, придется программно что-то менять. Тут я просто дал очень простые задачи, которые уже вызывают проблемы, а могут быть куда более сложные, например, вывести все труды, в которых участвовали преподаватели, которые написали труд №2 и труд №3. Или, что хуже, вывести 3 труда, у которых максимально совпадает количество преподавателей с указанным списком (Иванов, Петрова, Сидоров, ... и.т.д.) - это типичная задача при поиске релевантного соответствия.

Вывод: я не просто рекомендую, я настоятельно рекомендую сделать все правильно в рамках 1, 2 и 3-ей нормальной формы.

Добавлено через 8 минут
Цитата Сообщение от SunDrop Посмотреть сообщение
прийдется потом както для каждого вводимого труда выбирать с списка преподов
SQL
1
2
3
SELECT trud_name, GROUP_CONCAT(prepod_name) FROM trud
INNER JOIN trud2prepod USING (trud_id)
INNER JOIN prepod USING(prepod_id)
И получаешь все красиво, по трудам, с запятыми.
Нужны другие разделители? Нивапрос:
Code
1
2
3
4
GROUP_CONCAT([DISTINCT] expr [,expr ...]
  [ORDER BY {unsigned_integer | col_name | expr}
  [ASC | DESC] [,col_name ...]]
  [SEPARATOR str_val])
manual - group_concat on mysql.com
0
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 8
29.04.2010, 13:11  [ТС]
Спасибо большое, будем пробовать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.04.2010, 13:11
Помогаю со студенческими работами здесь

Построить иерархию классов: студент, преподаватель, персона, заведующий кафедрой
Помогите построить иерархию классов: студент, преподаватель,персона, заведующий кафедрой, используя: наследование и виртуальные функции....

Построить иерархию классов: студент, преподаватель, персона, заведующий кафедрой
Помогите построить иерархию классов: студент, преподаватель,персона, заведующий кафедрой.

Как максимально защитить свой труд от взлома
Как максимально защитить свой труд от взлома....и т.п. так как там есть много труда вложеного .....а ексель можно сломать любой ...

Как правильно построить DLL?
Доброго времени суток! Скачала папку с примером плагина для приложения, в ней 2 папки: с открытым кодом плагина и уже готовый...

Как правильно построить выражение?
Помогите пожалуйста построить выражение в поле запроса на выборку. В поле запроса есть такое выражение которое вычисляет разницу в часах:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 30.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru