Итак, вчера я задал 2 вопроса, которые вращались вокруг одной и той же идеи: реорганизация базы данных, которая не была нормализована, а B - была неразбериха из-за моего невежества. Большую часть дня я провел, организуя свои мысли, читая и прорабатывая некоторые тесты. Сегодня я думаю, что у меня есть намного лучшее представление о том, как должна выглядеть и действовать моя БД, но я хотел убедиться, что понял основные идеи правильного проектирования и нормализации БД SQL.
Первоначально у меня была ОДНА таблица, называемая «Файлы», в которой содержались данные о файле (его URL, дата загрузки, идентификатор пользователя, кто его загрузил и т. Д.), А также столбец «оценки», представляющий уровень оценки, который вы могли бы получить. использовать этот файл для. (К вашему сведению: эти файлы являются планами уроков для школ) Я понял, что нарушил Правило № 1 о нормализации - я хранил свои «оценки» как «1,2», «2,6» или «3,5,6». "в одном столбце. Это вызвало сильные головные боли при попытке проанализировать эти данные, если я хотел посмотреть уроки JUST 3-го класса или JUST 5-го класса.
То, что мне предложили, и что стало очевидным позже, это то, что у меня есть 3 таблицы:
файлов (данные о файлах, URL и т. Д.)
оценки (таблица доступных уровней оценки. Вероятно, 1-6, чтобы начать)
files_grades (таблица соединений)
Это имеет смысл. Я просто хочу убедиться, что я понимаю, что я делаю, прежде чем я это сделаю. Допустим, пользователь А загружает файл xyz и решает, что он подходит для классов 2 и 3.
Я бы записал ОДНУ запись в таблицу «files» с данными об этом файле (размер в килобайтах, URL, описание, имя, первичный ключ files_id). Допустим, он получает идентификатор 345.
Из-за ограниченного числа вариантов оценок оценки, вероятно, будут эквивалентны их идентификатору (т. Е. 1 класс - grades_id 1, 2 класс - grades_id 2)
Затем я бы написал ДВЕ записи в таблицу соединений "files_grade", содержащую
files_grade_id, files_id и grades_id, т.е. 1011 *
1,345,2
1,345,3
Для представления двух оценок, для которых подходит files_id 345. Затем я машу волшебными палочками SELECT и JOIN и извлекаю нужные мне данные.
Имеет ли это смысл? Неужели я опять неправильно понимаю правильную структуру реляционной базы данных «многие ко многим»?
Задача 2, которая меня только что осенила: итак, урок может иметь несколько «оценок». Нет проблем, мы просто решили это (надеюсь!). Но теоретически он может иметь несколько «школ», а именно: начальную, среднюю, высшую. Что нам делать, если запись файла имеет 1,2 балла для среднего, высокого уровня? Это очень легко решить, сказав «Одна школа на файл, пользователи!», Но мне нравится показывать это там.