有关数据库设计最佳性能的两个问题

时间:2019-06-22 14:56:31

标签: sql-server database entity-framework database-design entity-framework-core

我正在设计数据库,但是我对结构及其优化方法有疑问。

关于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; }
}

它们具有相同的结构,我不确定哪个会更好,将它们作为单独的表而不是带有歧视列的一个表(据我所知,它将是一个聚簇索引,您可以看到为什么会造成混淆给我)

感谢您对此的投入,如果重复,请原谅,但我不确定如何搜索。

0 个答案:

没有答案