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,则可以检入应用程序代码并相应地处理该值。(如:不发送生日卡,…)
  • 它是干净的-您可以在数据库浏览器中读取普通数据

谢谢,问题是:因为这是一个针对不同用户的系统,例如电话属性是针对userA的,而生日仅针对B,如果用户有很多收件人,但只需要电子邮件属性,则会导致大量空记录。e、 g.ID1空test@test.comnull null这会有问题吗?我看不出有问题。此外,如果用户a想要电话是必填字段,但用户B不想要它,这将导致问题。我无法注意到谁想要字段,例如电话必填字段,谁不想要电话必填字段