Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 合并来自不同表列的数据设计问题_Database_Database Design_Normalization - Fatal编程技术网

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

Database 合并来自不同表列的数据设计问题,database,database-design,normalization,Database,Database Design,Normalization,我有两个表:会员表和邮件列表表 [Members] Username Password EmailAddress MailingListOptIn [bit] Planes [bit] Boats [bit] Cars [bit] “水果”列是用户的首选项 及 邮件列表用户可以选择接收时事通讯,但不一定是会员 我想开始存储邮件列表的首选项。我的问题是,整合这两个表数据的最佳方式是什么 我尝试过使用members表只存储用户名、密码等成员信息,使用单独的profiles表存储电子邮件地

我有两个表:会员表和邮件列表表

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

  • 邮件列表用户可以选择接收时事通讯,但不一定是会员
我想开始存储邮件列表的首选项。我的问题是,整合这两个表数据的最佳方式是什么

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

所以现在我的选择是:

  • 坚持使用这两个表,但在mailinglist表中引入重复的“首选项”列
  • 使用单轮廓表和螺钉参考完整性

  • 或者有其他更好的方法吗?

    我会这样做:

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

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

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

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


    很抱歉添加了表,但我认为这是考虑到需求的适当规范化的最低设置。

    我会这样做:

    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;
    
    i) 以电子邮件地址为键的“person”表

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

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

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

    很抱歉添加表,但我认为这是考虑到需求的适当规范化的最低设置

    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;