表格修正: id,name
(3, 'com')
表DomainName: id,name
(2, 'microsoft')
表域: id,name_code,sufix
(1, 2, 3) -- microsoft.com
表SubDomainName:
(4, 'windows')
表子域名: id,name_code,domain
(7, 4, 1) -- windows.microsoft.com
表格电邮: id,name,atserver
(3, 'myemail', 7) -- myemail@windows.microsoft.com
(4, 'other', 1) -- other@microsoft.com
这是外键约束的问题。如何解析域和子域以正确创建电子邮件?我遇到了带有NULL值的Unique INDEX问题,例如,解决方案可能是:
表格电邮: ID,域名,子域名,域名
(3, 'myemail', 7, NULL) -- myemail@windows.microsoft.com
(4, 'other', NULL, 1) -- other@microsoft.com
BUT
(5, 'newemail', NULL, NULL) -- will duplicated values in the table
(6, 'newemail', NULL, NULL)
(7, 'newemail', NULL, NULL)
(8, 'newemail', NULL, NULL)
和
(**3**, 'myemail', 7, 1) -- myemail@windows.microsoft.com and myemail@microsoft.com
答案 0 :(得分:2)
MySQL中的唯一功能只检查非NULL值是否唯一。 所以,如果你不喜欢有一个以上的系列:
(6, 'newemail', NULL, NULL)
您必须在theese最后两个字段上放置一个唯一索引,并在其中放置除NULL之外的值(即0)
(6, 'newemail', 0, 0)
然后MySQL将阻止多个条目。
答案 1 :(得分:2)
如何(5,'newemail',domain_id / subdomain_id,'domain / subdomain')
所以你可以拥有
(5,'newemail',7,'subdomain')或(5,'newemail',1,'domain')
你仍然可以LEFT JOIN SubDomain和Domain表,但是你只能根据'domain / subdomain'字段获得你需要的数据。
这是快速解决方案。恕我直言你的数据库结构不是很好,可以优化。您应该将所有域/子域记录保存在一个表中,并将其用于电子邮件。该表应为Table FullDomain:id,name_code,domain_name,subdomain_name
(1, 3, 2, 4) -- windows.microsoft.com
或
(1, 3, 2, 0) -- microsoft.com