2012-02-16 60 views
0

我设计一个数据库结构的邮件列表 的数据,我需要记录数据库结构是邮件接收数据:的邮件列表

由于邮件接收数据不被预定义, 它会导致问题: 例如: 一些接收机有姓名,邮件地址和电话号码 而其他人的姓名,生日,电子邮件地址,性别,等等

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 [email protected] 

Receiver: 1 2 2 
Attribute: 2 Name 
Data:2 Tony 

,因为我想这会带来问题检查数据字段类型和长度,什么是更好的数据库设计?对不起描述的不好,我会澄清,如果你感到困惑。谢谢很多。

回答

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  [email protected]  NULL  21.12.2012 
2  John   Doe   [email protected]  555-1234 NULL 
  • 它的性能会更好
  • 的数据类型是有严格规定
  • 你可以检查你的应用程序代码是否为NULL,并相应地处理。 (如:不要送生日卡,..)
  • 它是干净的 - 你可以在数据库浏览器中阅读纯数据
+0

感谢和问题是:因为它是针对不同用户 系统所以,例如。 phone属性为userA,而birthdate仅为B – user782104 2012-02-16 08:08:28

+0

如果用户有很多接收者但只需要电子邮件属性,则会导致很多空记录。 例如 id 1 null null [email protected] null null 会是一个问题吗? – user782104 2012-02-16 08:09:29

+0

我看不出有什么问题。 – Kaii 2012-02-16 08:12:44