我正在为邮件列表设计数据库结构 我需要记录的数据是邮件收件人数据:
由于邮件收件人数据不是预定义的, 它会导致一个问题: 例如: 一些接收者有姓名,邮件地址,电话号码 而其他人有姓名,出生日期,邮件地址,性别等......
So my design is like this:
Table Receiver:
PK: ReceiverID
AttributeID
DataID
Table Attribute:
PK: AttributeID
AttributeName
Table Data:
PK: DataID
DataContent
A example of one receiver is:
Receiver: 1 1 1
Attribute: 1 mailAddress
Data:1 test@test.com
Receiver: 1 2 2
Attribute: 2 Name
Data:2 Tony
这会导致问题,因为我想检查数据字段的类型和长度,有什么更好的数据库设计?对于糟糕的描述感到抱歉,如果你感到困惑,我会澄清它。非常感谢。
答案 0 :(得分:1)
每个定义不可能定义未知属性的数据类型。这就是数据库的工作方式。
我知道你希望生日是DATETIME专栏。 (以及其他一些属性可能还有其他“特殊”数据类型)
我无法相信预定义可用属性的不可靠性 - 它们是有限的。然后继续并定义可能的属性列表。
更好的数据库设计是创建一个包含所有可能字段的接收器表,并允许它们为NULL。在没有必要的情况下,将数据库用作任意属性的“通用存储”是不好的做法。
你的桌子看起来像这样:
CREATE TABLE maillist_receivers (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
email VARCHAR(128) NOT NULL,
firstname VARCHAR(128),
lastname VARCHAR(128),
phone VARCHAR(128),
birthdate DATETIME,
...
)
您的数据可能如下所示:
id firstname lastname email phone birthdate
1 Max Power mp@foo.com NULL 21.12.2012
2 John Doe john@doe.com 555-1234 NULL