如何在数据库的单个列中存储多个值?

时间:2018-01-10 17:28:38

标签: c# asp.net-mvc-5

我希望能够在数据库中存储/显示有关不同健身房分支的信息。我有关于每个分支的以下信息。

  1. Id
  2. 姓名
  3. RoomNumber
  4. 容量
  5. 地址
  6. 每个分支都有其唯一的地址,每个RoomNumber将具有不同的容量和分支名称。我搜索并尝试了不同的方法,但我无法解决它。下面的代码显示了我所做的。

    将存储每个分支记录的分支模型。

     public class Branch
     {
         public int Id { get; set; }
    
         [Required]
         [Display(Name = "Branch Name")]
         [StringLength(50)]
         public List<BranchName> BranchName { get; set; }
    
         [Required]
         public int RoomNumber { get; set; }
    
         [Required]
         [Range(5, 30)]
         public int Capacity { get; set; }
    
         [Required]
         [StringLength(50)]
         public string Address { get; set; }
    }
    

    这是具有RoomNumbers的BranchName模型。

     public class BranchName
     {
         public int Id { get; set; }
    
         [Required]
         public string Name { get; set; }
    
         [Required]
         public List<int> RoomNumbers { get; set; } 
     }
    

    以下屏幕截图显示了运行迁移时,BranchName模型未添加房间属性列表。

    enter image description here

    谢谢

2 个答案:

答案 0 :(得分:4)

你没有完全正确地分解分支和房间的想法。根据您的对象,您指示多个分支可以具有相同的地址,因为您将分支名称存储为集合,但只有一个地址。这意味着几个分支也将具有相同的房间信息,这也是不准确的。您还不只是想存储一组房间号码,因为那时您需要做更多的工作来获取关于该房间的详细信息。

这是一个更好的细分:

public class Branch
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public List<Room> Rooms { get; set; }
}

public class Room
{
    public int Id { get; set; }
    public int BranchId { get; set; }
    public int Number { get; set; }
    public int Capacity { get; set; }
    public bool Available { get; set; }
}

Branch有一个对象,简称为Branch,它具有特定于该分支的所有细节。这同样适用于房间细节。在分支对象内部,您有一组Room对象,用于存储有关所有房间的详细信息。通过向房间对象添加BranchId值,您可以指示房间及其详细信息仅适用于其实际所在的分支,现在可以扩展Room以包含分支的信息,任何想要使用它的人都会发现相关信息。当您获得任何特定分支机构的详细信息时,还可以轻松快速获取所有相关房间。

答案 1 :(得分:1)

当然,您不能将集合表示为单个列。您尝试建立的设计,与关系数据库逻辑完全不兼容。在您的案例中,似乎有两个实体RoomBranch就足够了。

public class Branch
{
    public int Id { get; set; }

    [Required]
    [Display(Name = "Branch Name")]
    [StringLength(50)]
    public string Name { get; set; }

    [Required]
    [StringLength(50)]
    public string Address { get; set; }

    public List<Room> Rooms { get; set; }
}
public class Room
{
    public int Id { get; set; }

    [Required]
    public int RoomNumber { get; set; }

    [Required]
    [Range(5, 30)]
    public int Capacity { get; set; }

    public int BranchId { get; set; }

    public Branch Branch { get; set; }
}
  • Branch包含NameAddress

  • 每间会议室包含RoomNumberCapacityBrandId,其中包含Branchs表格