Рекомендации по проектированию таблиц в SQL Server (Entity Framework, код первый, C #) - PullRequest
0 голосов
/ 24 сентября 2018

Я начал работать над сайтом, созданным другим домом разработчиков.Структура базы данных была создана с использованием подхода Entity Framework, основанного на коде.В коде C # мы имеем что-то вроде:

public class MainBusinessObject
{
    ...
    public SubBusinessObject { get; set; }
}

public abstract class SubBusinessObject 
{
    ...
}

public class SubBusinessObjectTypeOne : SubBusinessObject 
{
    ....
}

public class SubBusinessObjectTypeTwo : SubBusinessObject 
{
    ...
}

...

Существует 6 SubBusinessObject типов.У самого маленького есть одно свойство, у самого большого около 50. Абстрактный класс SubBusinessObject определяет еще 17 свойств.У MainBusinessObject около 35.

Какие сущности реального мира они представляют?Если MainBusinessObject содержит данные, скажем, для FruitForSale, то SubBusinessObject будет представлять Fruit, а SubBusinessObjectTypeOne может быть Apple, SubBusinessObjectTypeTwo может быть Orange и т. Д.

Оба класса MainBusinessObject и SubBusinessObject связаны с другими объектами базы данных (такими как источник и расположение элементов).Все эти объекты отображаются непосредственно в таблицы SQL Server.

В зависимости от этой конструкции запросы, работающие с MainBusinessObject, выполняются медленно.Например, для извлечения данных за один MainBusinessObject требуется около полсекунды (и почти 5 секунд при первом запуске).Я попытался сделать несколько звонков, но в итоге производительность примерно одинакова.Сайт в целом страдает от низкой производительности, и это ключевая область.

Обратите внимание, что я не администратор баз данных, я просто разработчик (и мы все знаем, насколько хорошо разработчики проектируют базы данных ...).Однако дизайн стола кажется мне слишком запутанным, хотя я вполне могу ошибаться.Будет ли объединение этих таблиц в одну таблицу считаться плохой практикой?Буду очень признателен за любые советы по решению подобных проблем.

1 Ответ

0 голосов
/ 24 сентября 2018

Будет ли объединение этих таблиц в одну таблицу считаться плохой практикой?

Нет, это не будет считаться плохой практикой.

EF 6 поддерживает две стратегиидля хранения иерархии наследования, например: Таблица-на-тип (TPT) и Таблица-на-иерархию (TPH).Хранилище TPT изначально привлекательно, поскольку каждый подтип получает свою собственную таблицу в базе данных.В TPH в одной таблице хранятся все атрибуты со столбцом дискриминатора.

Но, как я думаю, вы обнаруживаете, присоединение к этим таблицам во время выполнения может быть дорогостоящим.

Обычно TPH считаетсялучшие практики, так как менее подвержены проблемам с производительностью.И поэтому, нет, выравнивание всех этих таблиц не считается плохой практикой.По этой причине TPT еще не был реализован в EF Core.

Вам следует создать новую версию базы данных, используя TPH, и скопировать данные из текущей базы данных в новую для тестирования.Если вы хотите перевести свою базу данных для чтения в TPH, вот полезный пост о том, как это сделать с помощью миграции. Код Entity Framework сначала преобразует TPT в TPH

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