Вы должны прочитать и понять основы нормализации . для большинства проектов нормализация до 3-й нормальной формы будет просто прекрасной. всегда есть определенные сценарии, когда вы хотите более или менее нормализовать, но понимание концепций, лежащих в основе этого, позволит вам подумать о том, как ваша база данных структурирована в нормализованном формате.
вот очень простой пример нормализации таблицы:
students
student_id
student_name
student_class
student_grade
довольно стандартная таблица, содержащая различные данные, но мы можем сразу увидеть некоторые проблемы. мы видим, что имя учащегося зависит от его удостоверения личности, однако учащийся может участвовать в более чем одном классе, и каждый класс, возможно, будет иметь разную оценку. тогда мы можем думать о таблицах как таковых:
students
student_id
student_name
class
class_id
class_name
это неплохо, теперь мы можем видеть, что у нас есть разные ученики и разные классы, но мы не зафиксировали оценки учеников.
grades
student_id
class_id
grade
теперь у нас есть третья таблица, которая позволяет нам понять связь между конкретным учеником, конкретным классом и оценкой, связанной с этим классом. из нашей первой исходной таблицы теперь у нас есть 3 таблицы в нормализованной базе данных (давайте предположим, что нам не нужно больше нормализовать оценки для примера :))
несколько вещей, которые мы можем почерпнуть из этого очень простого примера:
- все наши данные связаны с каким-то ключом (student_id, class_id и student_id + class_id). это уникальные идентификаторы в каждой таблице.
- благодаря нашим связям с ключами мы можем связать информацию друг с другом (во сколько классы зачислен студент № 4096?)
- мы видим, что наши таблицы теперь не будут содержать дублированных данных (вспомните нашу первую таблицу, где student_class может быть одинаковым значением для многих студентов. Если бы нам пришлось изменить имя класса, нам пришлось бы обновить все записи в нашем нормализованном формате мы можем просто обновить имя_класса_класса класса)