整合来自不同表的列的数据设计问题

时间:2009-06-03 16:15:21

标签: database database-design normalization

我有2个表:会员表和邮件列表表。

[Members] 
Username
Password
EmailAddress
MailingListOptIn [bit]
Planes [bit]
Boats [bit]
Cars [bit]
  • 水果列是用户首选项。

[MailingList]
EmailAddress
MailingListOptIn
  • 邮件列表可以选择接收新闻通讯,但可能不一定是会员

我想开始存储邮件列表人员的偏好。我的问题是整合这两个表数据的最佳方法是什么?

我已尝试使用成员表来存储仅包含用户名,密码等成员信息以及存储电子邮件地址和首选项的单独配置文件表。成员和邮件列表首选项都可以存储在此配置文件表中,但我无法添加FK约束,因此我无法添加邮件列表。

所以现在我的选择是:

  1. 坚持使用2个表,但在邮件列表表中引入了重复的“首选项”列。
  2. 使用单个配置文件表并拧紧参照完整性。
  3. 或许还有另一种更好的方式?

2 个答案:

答案 0 :(得分:1)

CREATE TABLE Profiles (
 Username
 Password
 EmailAddress
 MailingListOptIn [bit]
 Planes [bit]
 Boats [bit]
 Cars [bit]
);

CREATE VIEW Members AS
  SELECT * FROM Profiles WHERE Username IS NOT NULL
  WITH CHECK OPTION;

CREATE VIEW MailingList AS 
  SELECT EmailAddress, MailingListOptIn, Planes, Boats, Cars
  FROM Profiles WHERE Username IS NULL
  WITH CHECK OPTION;

答案 1 :(得分:0)

我会这样做:

i)以电子邮件地址为键的“人”表

ii)“会员”表,只有会员在此表中有记录,通过电子邮件地址链接到“人”(也是此表中的键)

iii)“mailingList”表,具有mailingList,描述和其他字段的唯一ID

iv)“mailingListSubscriber”表(一种关系),其中包含该人的电子邮件地址和邮件列表的ID。

很抱歉添加表格,但我认为这是满足要求的适当规范化的最小设置。