2012-03-22 87 views
0

我的大脑现在被炸,所以这里是场景。VB.NET如何存储多个对象(不同类的类型)

我有一个窗体,将成员添加到我的VB.NET应用程序。

当我按下提交时,我添加他们的细节:姓名和号码,以及他们想要什么产品(互联网和电话)。互联网和电话是他们自己的成员。

我想补充一点,他们有他们已经选择,并与会员店。

编辑:

所以它看起来像这样:

成员: 名 - 鲍勃 号 - 118 手机=真 互联网=假

这将是一个记录。

什么可以存储所有3所以有一个参考其中所有3个?它让我疯狂。

我原本有一个数组,它是否真的存在,但是在我实现类之前。

我还使用一个集合来存储成员,这些成员几乎包含了所有东西。

任何想法?

会发生什么,一旦成员被创建(存储),我会去输入他们已经使用了多少,然后存储它。但为此,我需要访问与该会员相关的互联网和电话课程。

+0

我不喜欢这个问题..是广泛的有一个正确的答案。你能否详细说明一下(它看起来是正确的,但我可以完全反驳你的前两个答案,但它们仍然是正确的)。你也在问关于程序商店和db存储(正如@competent_tech指出的那样) – gbianchi 2012-03-22 17:18:51

+0

数据库是逻辑的,而不是物理的。设想它是暂时的,只是本地存储。实际上,我将从问题中将其删除 – JonE 2012-03-22 17:48:49

回答

1

一个解决方案是定义一个定义类的公共属性的接口。例如,使用getType()方法定义Selectable。该接口由PhoneInternet实现。然后,您可以为每个用户维护一个对象集合Selectable,并通过遍历每个用户的集合并确定存在哪些类型的Selectable来构建行。

+0

感谢您的帮助 – JonE 2012-03-22 17:17:42

0

有两个部分,这一问题:

  1. 你如何在数据库中存储的信息?
  2. 如何将信息存储在应用程序中?

数据库中存储的典型场景是成员是父记录,因特网和电话是子记录,可以存储在同一个表中或不同的表中。

我通常喜欢将联系人信息存储在一个带有Type字段的单个表中,该字段描述了存储在记录中的数据类型以及包含与该记录关联的内容的单个字段(即网址,电子邮件地址,等等。)。

在此设计中,您将在“联系人”表中具有对成员主键的外键引用,并且成员主键不应与成员记录的内容有关。

例如:

CREATE TABLE Members 
(
     /* This table contains current information on a given Member */ 

     /* The unique id for this record */ 
     RecordId     INTEGER   NOT NULL IDENTITY(1,1) , 

     /* The Member's first name */ 
     FirstName     NVARCHAR(50)  NOT NULL , 
     /* The Member's middle name */ 
     MiddleName     NVARCHAR(50)  NULL , 
     /* the Member's last name */ 
     LastName     NVARCHAR(50)  NOT NULL , 

     CONSTRAINT PK_Members PRIMARY KEY 
     (
      RecordId 
    ) 
) 

CREATE TABLE Contacts 
(
     /* The unique id for this record */ 
     RecordId     INTEGER   NOT NULL IDENTITY(1,1) , 

     /* The member that this contact is associated with */ 
     MemberId     INTEGER   NOT NULL , 
     /* The type of contact. Current values are: 
      1 - Internent 
      2 - Phone 
     */ 
     Type      INTEGER   NOT NULL , 
     /* The contact details */ 
     Reference     NVARCHAR(MAX) NOT NULL , 

     CONSTRAINT PK_Contacts PRIMARY KEY 
     (
      RecordId 
    ) , 

     /* Referential integrity notes: 

      If the member is deleted, all associated records in this table will be automatically deleted 
     */ 
     CONSTRAINT FK_Members_C FOREIGN KEY (
      MemberId 
    ) REFERENCES Members (
      RecordId 
    ) ON DELETE CASCADE 
) 

对于存储的应用程序,我个人更喜欢在应用带班镜像数据库中的表,因为这是更容易维护和更具扩展性的信息:

Public Class Member 
    Public Property RecordId As Integer 
    Public Property FirstName As String 
    Public Property MiddleName As String 
    Public Property LastName As String 

    Public Property Contacts As New System.Collections.Generic.Dictionary(Of Integer, Contact) 

End Class 

Public Class Contact 
    Public Property RecordId As Integer 
    Public Property MemberId As Integer 

    Public Enum Types 
     None 
     Internet 
     Phone 
    End Enum 

    Public Property Type As Types 
    Public Property Reference As String 
End Class 

但是,随着数据从数据库中读取并存储到成员中,您还可以根据类型生成现有类的实例。

+0

不寻找SQL,这是vb.net,它是一个集合或我正在使用的东西来将所有东西放在一起。 – JonE 2012-03-22 17:17:25