此刻我的大脑已经被炒了,所以这就是场景。
我有一个表单,可以将成员添加到我的VB.NET应用程序中。
当我按提交时,我会添加他们的详细信息:姓名和号码以及他们想要的产品(互联网和电话)。互联网和电话是他们自己的班级成员。
我想补充说,无论他们选择了什么,还是会员存储它。
编辑:
所以它看起来像这样:
会员: 名字 - 鲍勃 数字 - 118 手机=真 互联网=错误
这将是一条记录。
我可以将所有3个存储在哪里,因此可以参考所有3个?它让我疯了。
我最初有一个数组,无论它们是否存在,都有真或假,但那是在我实现类之前。
我还使用了一个集合来存储成员,这些成员几乎包含所有内容。
有什么想法吗?
正如所发生的那样,一旦成员被创建(存储),我将输入他们已经使用了多少,然后存储它。但要这样做,我将需要访问与该成员相关的互联网和电话课程。
答案 0 :(得分:1)
一种解决方案是定义一个定义类的公共属性的接口。例如,使用Selectable
方法定义getType()
。此界面由Phone
和Internet
实现。然后,您可以为每个用户维护一个Selectable
个对象的集合,并通过迭代每个用户的集合并确定存在哪些类型的可选项来构建行。
答案 1 :(得分:0)
这个问题分为两部分:
数据库中存储的典型方案是成员是父记录,Internet和电话是子记录,存储在同一个表或不同的表中。
我通常的偏好是将联系人信息存储在单个表中,其中Type字段描述记录中存储的数据类型,以及保存与记录关联的内容的单个字段(即Web地址,电子邮件地址等) )。
在此设计中,您将在Contacts表中拥有对成员主键的外键引用,而成员主键不应与成员记录的内容相关。
例如:
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
但是,您也可以根据类型制作现有类的实例,因为数据正在从数据库中读取并存储在成员中。