Mysql 邮件列表的数据库结构
我正在为邮件列表设计一个数据库结构 我需要记录的数据是邮件收件人数据: 由于邮件收件人数据不是预定义的, 它会导致一个问题: 例如: 有些收件人有姓名、邮寄地址、电话号码 其他人有姓名、出生日期、邮寄地址、性别等Mysql 邮件列表的数据库结构,mysql,Mysql,我正在为邮件列表设计一个数据库结构 我需要记录的数据是邮件收件人数据: 由于邮件收件人数据不是预定义的, 它会导致一个问题: 例如: 有些收件人有姓名、邮寄地址、电话号码 其他人有姓名、出生日期、邮寄地址、性别等 So my design is like this: Table Receiver: PK: ReceiverID AttributeID DataID Table Attribute: PK: AttributeID AttributeName Table
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
这导致了一个问题,因为我想检查数据字段的类型和长度,什么是更好的数据库设计?很抱歉描述不好,如果您感到困惑,我会澄清。非常感谢。根据定义不可能为未知属性定义数据类型。这就是数据库的工作方式
我知道你希望生日成为DATETIME专栏。(可能还有其他一些属性的“特殊”数据类型)
我无法相信预先定义可用属性的可能性——它们是有限的。只需继续定义一个可能属性的列表
更好的数据库设计是只创建一个包含所有可能字段并允许它们为空的receiver表。在不必要的情况下,将数据库用作任意属性的“通用存储”是不好的做法
您的桌子可能如下所示:
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
您的数据可能如下所示:
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
- 它的性能更好
- 数据类型定义良好
- 如果值为NULL,则可以检入应用程序代码并相应地处理该值。(如:不发送生日卡,…)
- 它是干净的-您可以在数据库浏览器中读取普通数据