繁体   English   中英

在SQL中创建分数表

[英]Creating a score sheet in SQL

在我的网站上,我有一个用户填写的评分表。 他们通常在成绩单上有10个项目,每个项目都有自己的得分。 我想以最佳方式设计此功能,以实现将来的可扩展性。 如果将来我想在计分表中增加或减少项目怎么办?

这是我现在所拥有的:

public class Scoresheet712Item
    {
        public int ScoresheetItemId { get; set; }
        public int ScoresheetId { get; set; }
        public int DistanceAway { get; set; }
        public int score { get; set; }
    }

这样做更好还是将所有10个得分和距离都排在同一行呢? 我宁愿将它们放在同一行中,因为我可以直接将那一行作为模型拉入。 我最初以这种方式进行操作,因此我可以轻松地更改计分表上的插槽数,但实际上并没有太大的好处,特别是因为我使用的是MVC开发,并且我将始终需要整个评分表。

请帮忙,我可以将所有数据放在一张评分表的一行中,这是一个好习惯吗?

这是我要提出的建议,但会有所不同,因为每个分数的目的不同。

public class Scoresheet
        {
            public int ScoresheetId { get; set; }
            public int DistanceAway1 { get; set; }
            public int score1 { get; set; }
            public int DistanceAway2 { get; set; }
            public int score2 { get; set; }
            public int DistanceAway3 { get; set; }
            public int score3 { get; set; }
            public int DistanceAway4 { get; set; }
            public int score4 { get; set; }
            public int DistanceAway5 { get; set; }
            public int score5 { get; set; }
            public int DistanceAway6 { get; set; }
            public int score6 { get; set; }
            public int DistanceAway7 { get; set; }
            public int score7 { get; set; }
            public int DistanceAway8 { get; set; }
            public int score8 { get; set; }
            public int DistanceAway9 { get; set; }
            public int score9 { get; set; }
            public int DistanceAway10 { get; set; }
            public int score10 { get; set; }
        }

像这样?

public class Scoresheet712
    {
        public int Scoresheet712ID { get; set; }
        public virtual ICollection<Scoresheet712Item> Scoresheet712Items { get; set; }
    }

我倾向于同意@Stephen Muecke的灵活性和可扩展性,您确实需要两个sql表。

public class Scoresheet
{
    public int ScoresheetId { get; set; }
    public string ScoresheetName { get; set; }
    public ICollection<ScoresheetItem> ScoresheetItems { get; set; }
}

Public class ScoresheetItem
{
    public int ScoresheetItemId { get; set; }
    public int Score { get; set; }
    public int Distance { get; set; }
    //Navigation properties
    public int ScoresheetId { get; set; }
    public Scoresheet Scoresheet { get; set; }
{

这样一来,您就可以根据需要构建新的计分表,其中包含所需的数量。 下面的示例显示用法。

//Create a new Scoresheet
Scoresheet scoresheet712 = new Scoresheet()
{
    ScoresheetName = "Score Sheet 712",
    ScoresheetItems = new List<ScoresheetItem>()
};
//Add a ScoresheeItem to Scoresheet
scoresheet712.ScoresheetItems.Add(new ScoreSheetItem()
{
    Score = 10,
    Distance = 150
});

请记住,在视图上您不需要使用数据模型,您始终可以添加数据传输对象(Scoresheet_DTO)并为分数表创建扁平结构(如果确实确实使显示更容易/更好),请务必使用nullable integers

更新多对多关系

对于多对多关系,如果在代码中正确设置,它将自动创建联接表。 Scoresheet类将保持不变,但ScoresheetItem类将对Relationship / Navigation属性进行很小的更改。

Public class ScoresheetItem
{
    public int ScoresheetItemId { get; set; }
    public int Score { get; set; }
    public int Distance { get; set; }
    //Navigation properties
    public ICollection<Scoresheet> Scoresheet { get; set; }
{

为了获得更多帮助,我建议您看一下《 实体框架教程》

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM