Производительность в дизайне базы данных

Я должен реализовать платформу для тестирования. Моей базе данных нужны следующие таблицы: Students, Teachers, Admins, Personnel и другие. Я хотел бы знать, эффективнее ли иметь FirstName а также LastName в каждой из этих таблиц или иметь другую таблицу, Personsи каждая другая таблица должна быть связана с этой PersonID,

Лично мне это нравится, хотя и сложнее в реализации, потому что я думаю, что это чище, особенно если смотреть на это с объектно-ориентированной точки зрения. Это добавит ненужные накладные расходы в базу данных?

Не знаю, поможет ли упомянуть, что я хотел бы использовать SQL Server и ADO.NET Entity Framework.

4 ответа

Решение

Поскольку вы прямо упомянули ОО и что вы используете EntityFramework, возможно, стоит рассмотреть проблему вместо того, чтобы понять, как должна работать среда, а не просто построить структуру базы данных и затем попытаться смоделировать ее?

Первичное наследование кода Entity Framework: таблица на иерархию и таблица на тип - это хорошее введение в различные стратегии, из которых вы можете выбирать.

Что касается примечания о добавлении ненужных накладных расходов в базу данных - я бы пока об этом не беспокоился. Как правило, EF - это создание продукта более быстрым и, поскольку он должен справляться с более общим случаем, не всегда дает наиболее эффективный SQL. Если производительность будет проблемой после того, как ваше приложение будет создано, работает и исправится, вы можете вернуться к нему и исправить самые неэффективные вещи.

Если между упомянутыми таблицами есть совпадение людей, то да, вы должны разделить их на Persons Таблица.

Если вы только отслеживаете, какую роль каждый Person имеет (то есть Student против Teacher и т.д.) тогда вы можете рассмотреть возможность использования следующих трех таблиц: Persons, Rolesи стол для бриджа PersonRoles,

С другой стороны, если у каждой роли есть свои уникальные поля, то вам следует вести себя как есть и оставлять каждую из этих таблиц отдельно с помощью внешнего ключа: PersonID,

Если attributes (т.е. имя, фамилия, пол и т. д.) из них entities (т.е. студенты, преподаватели, администраторы и персонал) абсолютно одинаковы, тогда вы можете просто составить единую таблицу для всех объектов с PersonType или же Role атрибут добавлен, чтобы отличить роль каждого человека. Однако, если у сущностей много разных атрибутов, лучше создать отдельные таблицы, иначе у вас будет normalization проблема.

Да, это очень плохой способ структурирования БД. Структура БД должна быть разработана на основе нормализации.

Пожалуйста, проверьте формы нормализации.

Вам следует избегать дублирования данных в максимально возможной степени, иначе запросы станут медленнее.

И главная проблема - когда вы пытаетесь получить данные, связанные с более чем одной или двумя таблицами.

Другие вопросы по тегам