【问题标题】:Consolidating data from columns of different tables design problem合并来自不同表的列的数据设计问题
【发布时间】:2010-10-31 01:06:22
【问题描述】:

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

[Members] 
Username
Password
EmailAddress
MailingListOptIn [bit]
Planes [bit]
Boats [bit]
Cars [bit]
  • 水果列是用户偏好。

[MailingList]
EmailAddress
MailingListOptIn
  • mailinglist'er 可以选择接收时事通讯,但不一定是会员

我想开始存储邮件列表用户的首选项。我的问题是合并这两个表数据的最佳方法是什么?

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

所以现在我的选择是:

  1. 坚持使用 2 个表格,但在邮件列表表格中引入重复的“首选项”列。
  2. 使用单一配置文件表和螺钉参照完整性。

或者也许还有其他更好的方法?

【问题讨论】:

    标签: database database-design normalization


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      我会这样做:

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

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

      iii) 一个“mailingList”表,有一个唯一的 id 用于 mailingList、描述和其他字段

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

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

      【讨论】:

        猜你喜欢
        • 2012-02-04
        • 1970-01-01
        • 2019-06-09
        • 2016-12-09
        • 1970-01-01
        • 2014-08-29
        • 1970-01-01
        • 2022-08-18
        • 2020-06-25
        相关资源
        最近更新 更多