我正在尝试为联系人创建数据库 我需要每个联系人都有很多catogries 像家 办公室 电子邮件 手机 并且在每个类别中都可以添加更多的值 类别也可以是动态的 如何在数据库中设计
答案 0 :(得分:2)
在我看来,您需要关注两种分类。首先你有联系的目的,即家庭或办公室(可能有其他人,如总公司,紧急联系人,度假屋......),另一个是联系的媒介,即电子邮件,电话(这里也可能有其他人,如BlackBerry PIN,传真,邮寄地址,送货地址......)
在第一种情况下,您要描述联系人的使用方式或原因;在第二种情况下,您要描述用于联系的媒体。
这些应该单独考虑,因为它们将驱动不同的应用程序功能。例如,您可能有一些GUI代码显示不同的字段并执行不同的编辑,具体取决于您是捕获邮寄地址还是邮政地址与电话号码等。同样,您可能有业务规则,说Office联系是强制性的和家庭联系是可选的。
以下是架构的快速草图,允许您进行这些分类:
CUSTOMER表(为了便于说明)包含您希望能够联系的人员。 CONTACT表包含联系客户所需的实际信息。您可以根据需要使用通用设计或类似XML数据的结构。表格驱动的两种类型如下:
CONTACT_PURPOSE告诉您联系方式的原因。这是您的家庭/办公室/ ...分类。这主要是一个查找表,但它可能有一些规则,例如联系是否是强制性的。
CONTACT_FORMAT告诉您联系人的结构。这是您的电子邮件/电话/地址/ ...分类。这将有一个查找表元素,但它也可能包含联系人数据结构的规则,如多少字段?每个领域有多大?什么是用于验证联系人内容的正则表达式模式等。
答案 1 :(得分:1)
联系人( ID ,FirstName,LastName,..)
类别( ID ,姓名)
CategoryNumbers(的的ContactID,类别ID,编号强>)
您需要一个默认类别,因为在此设计中,您无法添加没有类别的数字。
答案 2 :(得分:1)
@Joel Brown的好解释,我想补充一下。
Contact中的内容可以是其他一些表,具体取决于CONTACT_FORMAT,例如
1)如果CONTACT_FORMAT是Address,那么它可以引用ADDRESS表,其中包含街道,城市,州,国家等字段。
2)如果CONTACT_FORMAT是Phone,那么它可以参考PHONE表,其中包含请求,通话时间,区号,国家代码等字段。
对于需要特定字段的不同CONTACT_FORMAT,就像这样。