0

Мой вопрос в том, какие лучшие практики для проектирования баз данных/приложений для следующего?Аннотация по сравнению с дизайном отдельной таблицы

Я использую 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 сущности личности и группы, которые имеют многие-ко-многим. Теперь я хочу добавить ярлыки к каждому, чтобы фильтровать данные на основе бизнес-логики. Есть несколько способов сделать это:

  1. Отдельная таблица «ObjectLabel», которая имеет «поддельные» ссылки FK на любую таблицу с столбцом типа. Это, вероятно, плохая практика, но может упростить реализацию кода и обеспечить большую гибкость.
  2. Строковый столбец для каждого объекта для сохранения, например. разделенный запятыми список меток. Выгода от простой базы данных, но будет медленнее при масштабировании данных.
  3. Отдельные таблицы, а именно «PersonLabel», «GroupLabel» и т. Д., Чтобы сохранить ссылочную целостность для быстрого поиска, но кажутся излишними и потребуют больше работы.

Теперь я хотел бы посоветовать, какой подход лучше всего и почему?

+1

Я бы использовал вариант 3 большую часть времени, это зависит от масштаба проекта, как вы сказали. Никогда не следует использовать опцию 1. –

+0

На самом деле я оказался на Варианте 1, затраты на производительность будут сведены к минимуму с индексированием таблицы propper, а затем я смогу использовать преимущества более простой абстрактной бизнес-логики в моем коде. – John

ответ

1

В зависимости от того, какие метки и насколько динамичны они должны быть, вы можете изучить флаги Enum. Для этого все равно потребуется только один столбец для каждой таблицы и, безусловно, будет лучше, чем иметь список, разделенный запятыми, в столбце.

Вы можете увидеть пример here или here о том, как это сделать.

+0

спасибо за предложение, но идея состоит в том, чтобы иметь много к одному, и они будут полностью динамичными. Представьте себе, например, ярлыки githubs. – John

+0

На самом деле ваше предложение может работать сейчас, когда я думаю об этом. Я могу просто иметь отдельную таблицу поиска, чтобы определить, что означает каждый номер, и ограничить количество меток, разрешенных для каждого объекта. Если нет лучших решений, я помечаю это как ответ позже. – John

 Смежные вопросы

  • Нет связанных вопросов^_^