LINUX.ORG.RU

Помогите с таблицами в mysql 8

 ,


1

2

Мне нужно составить бд школьного расписания. У меня будут 6 таблиц: 1 - таблица с названиями предметов 2 - таблица с уроками на понедельник для всех 11 классов 3 - таблица с уроками на вторник для всех 11 классов 4 - таблица с уроками на среду для всех 11 классов 5 - таблица с уроками на четверг для всех 11 классов 6 - таблица с уроками на субботу для всех 11 классов Таблица дней имеет такую структуку - lessons_id, class1, class2.. class11 Хочу сделать так, чтобы значения названий предметов брались из таблицы с названиями предметов и вставлялись в поля classn в таблицах с расписанием. Сам в бд пока не очень, поэтому прошу вашей помощи

Ответ на: комментарий от Anoxemian

У него даже форма не нормализована. Для каждого класса-дня недели своя таблица. Тут бы развязать классы, дни, уроки и сделать многие ко многими.

deep-purple ★★★★★
()
Ответ на: комментарий от Anoxemian

Если можете составить запрос, то было бы просто чудесно? ddl? В плане языка описания данных? (если задаю тупые вопросы, то сорри) у меня sql

Benj2000
() автор топика
Ответ на: комментарий от deep-purple

У него даже форма не нормализована.

к этому он придет со временем, для «здесь и сейчас» не существенно

Anoxemian ★★★★★
()
Ответ на: комментарий от Benj2000

ddl? В плане языка описания данных? (если задаю тупые вопросы, то сорри) у меня sql

ты школьник или учитель информатики?

Anoxemian ★★★★★
()
Ответ на: комментарий от Benj2000

Делай так:

Таблица «уроки (lessons)»

id - целое, беззнаковое, автоинкремент

name - варчар 255 утф-8 генерал цы, название урока (История, Математика, др.)

Таблица «классы (classes)»

id - целое, беззнаковое, автоинкремент

name - варчар 255 утф-8 генерал цы, название класса (11 класс, 5 класс, др.)

Таблица «уроки классов (classes_lessons)»

class_id - целое, беззнаковое, не уникальный индек, айдишник класса

lesson_id - целое, беззнаковое, не уникальный индек, айдишник урока

lesson_date_time - DATETIME, дата и время начала урока

Но если тебе не критична вся сетка календаря, то можешь вместо lesson_date_time сделать поле day_number - ENUM, беззнаковое, не уникальный индекс и перечислить там все дни словами: «mon», «tue» и т.д.

Если важен порядок следования уроков, добавь поле sort_number - инт, беззнаковое, не уникальный индекс.

А вот потом поговорим какие данные и в каком виде ты хочешь из этих таблиц доставать.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 2)
Ответ на: комментарий от deep-purple

Насчёт таблицы уроков и классов согласен. А вот уроки классов думаю лучше разбить на 5 таблиц для каждого дня. Так ведь удобнее для просмотра. Плюс буду делать прогу для просмотра этой бд и я пока не представляю как это всё организовать с одной таблицей для всех дней. К тому же задание дали именно с 5 таблиц. Сказали сделать для каждого дня, а название уроков брать с отдельной таблицы, чтобы тип не прописывать для каждой таблицы руками. Вот мне и интересно, как сделать так, чтобы названия уроков из соответствующей таблицы были в 5-ти таблицах

Benj2000
() автор топика

Зачем тебе по таблице на каждый день? Сделай одну колонки «день недели, класс». Итого у тебя:

  • Предметы (dis (Disciplines) => (id, name, id_class) )
  • Задания (disTasks => (id, id_dis, day, task) )
  • Классы (Classes => (id, number, litter) )

Ну и всё, делай выборки, подставляй что тебе надо. А также читай учебники по бд, высыпайся и хорошо кушай.
А если ты сделаешь софт для составления расписаний (куда будут заноситься группы, план дисциплин на группу, кабинеты, расписание звонков, преподаватели с их расписанием), которое, хотя бы, в полуавтоматическом режиме будет заполняться, то станешь самым любимым мальчиком в своей шараге. Тебе сразу выдадут красный диплом, пожулькают за щёчки и угостят леденцом.
А если ты сделаешь это всё на bootstrap, jquery, php, mysql, то сможешь пойти работать на фриланс помойку сразу, как всё это сдашь, доведешь до ума и вычистишь говнокод.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

самым любимым мальчиком ... bootstrap, jquery, php, mysql ... пойти работать на фриланс помойку сразу

Ну ты как всегда в своём репертуаре ))

deep-purple ★★★★★
()
Ответ на: комментарий от Benj2000

А вот уроки классов думаю лучше разбить на 5 таблиц для каждого дня. Так ведь удобнее для просмотра.

Какие сложности с тем, чтобы сделать выборку по полю?

К тому же задание дали именно с 5 таблиц.

А я и не думал, что наше ит образование настолько конченное, что даже ПРЕПОДАВАТЕЛИ ничего не знают про нормализацию.

crutch_master ★★★★★
()
Ответ на: комментарий от Benj2000

думаю лучше разбить на 5 таблиц для каждого дня
Я студент, который не очень понимает в бд

Зачем споришь? Делай одну.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

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

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Хуй с тем с преподом. Сделаю одну. С таблицами dis и classes всё ясно, а с заданиями будет выглядет тип так «id, id_dis это название предмета, day это дата, а task это класс? Так выходит?

Benj2000
() автор топика
Ответ на: комментарий от Benj2000

За нецензурщину может придти мочератор. Не делай так больше.

deep-purple ★★★★★
()
Ответ на: комментарий от Benj2000

task - это задание тупо какой-нибудь text или varchar, а класс через id на еще одну таблицу. Надо будет всё вместе - соединишь.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

До меня только доехало, что нужно создать 3 таблицы (предметы, классы и задания), а потом из каждой сделать выборку, что нужно. Там ещё как-то выборки сохранять можно было вродь. Что-то такое проходили. Я правильно понял?

Benj2000
() автор топика
Ответ на: комментарий от Benj2000

Ага. До тебя так скоро дойдет мысль что БД это про «хранить», а не про «смотреть». А «смотреть» (как и в каком виде) это уже задача прикладного приложения общающейся с это БД.

Noob_Linux ★★★★
()
Ответ на: комментарий от crutch_master

...плавно приближаемся к стендалон апи на посгрессе...

deep-purple ★★★★★
()
Ответ на: комментарий от crutch_master

Такс, я создал эти таблицы. " mysql> create table dis (id int not null primary key auto_increment, name char(30), id_class char(15));

mysql> create table disTasks (id int not null primary key auto_increment, id_dis char(30), task varchar(30));

mysql> create table classes (id int not null primary key auto_increment, number int(2), litter char(1)); "

Всё верно?

Benj2000
() автор топика
Ответ на: комментарий от Benj2000

Всё верно?

Все id - это int. Task длиннее, хотя бы 500. Varchar не хранит пустого места, нет смысла экономить. В dis name тоже varchar 30 - мало лучше 50-100 (у меня были и 200, хотя для школы может и сойдёт).

crutch_master ★★★★★
()
Ответ на: комментарий от bvn13

Я вот не пойму. То мне говорят разнести всё в разные таблицы, то спрашивают зачем я это сделал. Походу сколько людей, столько и мнений

Benj2000
() автор топика
Ответ на: комментарий от Benj2000

Тебе нужно 2 талицы.

1 - lessons, твоя с названиями предметов (поля id, name)

2 - roster, таблица с расписанием (поля id, weekday, classnum, lesson_id)

lesson_id имеет foreign key на id первой таблицы.

запрос получения расписания:

select r.id, r.weekday, r.classnum, l.name
from roster r
inner join lessons l
on r.lesson_id = l.id
bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

Окей. Использовал свою таблицу predmety, которая аналогична твоей lessons. Создал таблицу roster. Ввожу запрос и вот, что получаю:

 select r.id, r.weekday, r.classnum, p.name from roster r inner join predmety p on r.lesson_id = p.id_pred;
Empty set (0.00 sec)

Benj2000
() автор топика
Ответ на: комментарий от bvn13

в lesson_id я значений в самой таблице не задавал там Null. Во всех остальных столбцах есть значения

create table roster (
    -> id int not null primary key auto_increment,
    -> weekday char(30),
    -> classnum int,
    -> lesson_id int,
    -> foreign key (lesson_id) references predmety(id_pred)
    -> ); 
Таблицы связаны

Benj2000
() автор топика
Ответ на: комментарий от Benj2000

в lesson_id я значений в самой таблице не задавал там Null

from roster r inner join predmety

ну как бы inner join даст тебе пустой результат, если таблица не заполнена. Наполни таблицу тестовыми данными, потом делай селект свой.

bvn13 ★★★★★
()
Ответ на: комментарий от bvn13

Обновил значения и всё заработало. Спасибо большое)

Benj2000
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.