[英]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.