Я проектирую базу данных, но у меня есть некоторые сомнения относительно структуры и как ее оптимизировать.
первый вопрос относительно ключа varchar / string, у меня следующая структура таблицы
public class WordEntry
{
public Guid Id { get; set; }
public string word { get; set; }
public virtual List<DefinitionEntry> Definitions { get; set; }
public virtual List<ExampleEntry> Examples { get; set; }
public virtual List<SynonymEntry> Synonyms { get; set; }
public virtual List<AntonymEntry> Antonyms { get; set; }
public virtual PronunciationEntry Pronunciation { get; set; }
}
где, как вы можете сказать, для целей SEO, я буду чаще запрашивать эту таблицу, используя фактическое слово, будет ли удаление ключа Guid и замена его строкой лучшей идеей для более быстрого запроса?подойдет ли это как FK для остальных таблиц в ef core?Будет ли лучше использовать индекс navchar (100) для фактического слова?
Второй вопрос, касающийся следующих двух таблиц:
public class SynonymEntry
{
public Guid Id { get; set; }
public Guid WordEntryId { get; set; }
public Guid SynonymWordId { get; set; }
public InformationSource Source { get; set; }
public virtual WordEntry WordEntry { get; set; }
public virtual WordEntry SynonymWord { get; set; }
}
public class AntonymEntry
{
public Guid Id { get; set; }
public Guid WordEntryId { get; set; }
public Guid AntonymWordId { get; set; }
public InformationSource Source { get; set; }
public virtual WordEntry WordEntry { get; set; }
public virtual WordEntry AntonymWord { get; set; }
}
они имеют идентичную структуру, и я не уверен, какаябудет лучше, если они будут отдельными таблицами, а не одной таблицей со столбцом дискриминации (который, насколько мне известно, будет индексом кластеризации, вы можете понять, почему он меня смущает)
Ценю ваш вклад в это иизвините, если он дублируется, но я не знал, как его искать.