Мой вопрос в том, какие лучшие практики для проектирования баз данных/приложений для следующего?Аннотация по сравнению с дизайном отдельной таблицы
Я использую Code First Entity Framework и .Net MVC 5. Существуют общие функции, которые я хочу реализовать на разных объектах. Для примера рассмотрим следующий упрощенный пример:
class Person{
int PersonId;
string name;
}
class Member{
int PersonId;
int GroupId;
}
class Group{
int GroupId;
string name;
}
class Label{
string name;
}
Так 2 сущности личности и группы, которые имеют многие-ко-многим. Теперь я хочу добавить ярлыки к каждому, чтобы фильтровать данные на основе бизнес-логики. Есть несколько способов сделать это:
- Отдельная таблица «ObjectLabel», которая имеет «поддельные» ссылки FK на любую таблицу с столбцом типа. Это, вероятно, плохая практика, но может упростить реализацию кода и обеспечить большую гибкость.
- Строковый столбец для каждого объекта для сохранения, например. разделенный запятыми список меток. Выгода от простой базы данных, но будет медленнее при масштабировании данных.
- Отдельные таблицы, а именно «PersonLabel», «GroupLabel» и т. Д., Чтобы сохранить ссылочную целостность для быстрого поиска, но кажутся излишними и потребуют больше работы.
Теперь я хотел бы посоветовать, какой подход лучше всего и почему?
Я бы использовал вариант 3 большую часть времени, это зависит от масштаба проекта, как вы сказали. Никогда не следует использовать опцию 1. –
На самом деле я оказался на Варианте 1, затраты на производительность будут сведены к минимуму с индексированием таблицы propper, а затем я смогу использовать преимущества более простой абстрактной бизнес-логики в моем коде. – John