我正在设计数据库,但是我对结构及其优化方法有疑问。
关于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键并用字符串替换它会是更快查询的一个更好的主意吗?这是否适合ef核心中其余表的FK?实际单词上的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; }
}
它们具有相同的结构,我不确定哪个会更好,将它们作为单独的表而不是带有歧视列的一个表(据我所知,它将是一个聚簇索引,您可以看到为什么会造成混淆给我)
感谢您对此的投入,如果重复,请原谅,但我不确定如何搜索。