Php 具有唯一索引MySQL和空列的重复行
表Sufix: id,namePhp 具有唯一索引MySQL和空列的重复行,php,mysql,database,email,dns,Php,Mysql,Database,Email,Dns,表Sufix: id,name (3, 'com') (2, 'microsoft') 表域名: id,name (3, 'com') (2, 'microsoft') 表域: id、名称和代码、sufix (1, 2, 3) -- microsoft.com 表子域名: (4, 'windows') 表子域: id、名称、代码、域 (7, 4, 1) -- windows.microsoft.com (3, 'myemail', 7, NULL) -- myema
(3, 'com')
(2, 'microsoft')
表域名:
id,name
(3, 'com')
(2, 'microsoft')
表域:
id、名称和代码、sufix
(1, 2, 3) -- microsoft.com
表子域名:
(4, 'windows')
表子域:
id、名称、代码、域
(7, 4, 1) -- windows.microsoft.com
(3, 'myemail', 7, NULL) -- myemail@windows.microsoft.com
(4, 'other', NULL, 1) -- other@microsoft.com
表格电子邮件:
id、名称、atserver
(3, 'myemail', 7) -- myemail@windows.microsoft.com
(4, 'other', 1) -- other@microsoft.com
这里有一个外键约束问题。如何解析域和子域以正确创建电子邮件?我在使用空值的唯一索引时遇到问题,例如,解决方案可能是:
表格电子邮件:
id、名称、子域、域
(7, 4, 1) -- windows.microsoft.com
(3, 'myemail', 7, NULL) -- myemail@windows.microsoft.com
(4, 'other', NULL, 1) -- other@microsoft.com
但是
及
MySQL中的Unique只检查非空值是否唯一。 因此,如果您不喜欢使用多行代码:
(6, 'newemail', NULL, NULL)
您必须在最后两个字段上放置唯一索引,并在其中放置除NULL(即0)以外的值
然后MySQL将阻止多个条目。Unique在MySQL中只检查非空值是否唯一。 因此,如果您不喜欢使用多行代码:
(6, 'newemail', NULL, NULL)
您必须在最后两个字段上放置唯一索引,并在其中放置除NULL(即0)以外的值
然后MySQL将阻止多个条目。如何(5,'newemail',domain\u id/subdomain\u id',domain/subdomain')
所以你本来可以
(5,“新邮件”,7,“子域”)或(5,“新邮件”,1,“域”)
您仍然可以保留JOIN SubDomain和Domain表,但根据“Domain/SubDomain”字段,您只能从所需的表中获取数据
这是一个快速的解决方案。我想你的数据库结构不是很好,可以优化。您应该将所有域/子域记录保存在一个表中,并将其用于电子邮件。该表应为表FullDomain:id、名称\代码、域名、子域\名称
(1,3,2,4)--windows.microsoft.com
或
(1,3,2,0)--微软网站
怎么样(5,'newemail',domain\u id/subdomain\u id',domain/subdomain')
所以你本来可以
(5,“新邮件”,7,“子域”)或(5,“新邮件”,1,“域”)
您仍然可以保留JOIN SubDomain和Domain表,但根据“Domain/SubDomain”字段,您只能从所需的表中获取数据
这是一个快速的解决方案。我想你的数据库结构不是很好,可以优化。您应该将所有域/子域记录保存在一个表中,并将其用于电子邮件。该表应为表FullDomain:id、名称\代码、域名、子域\名称
(1,3,2,4)--windows.microsoft.com
或
(1,3,2,0)--微软网站
约束没有问题吗?我无法在“域\u id/子域\u id”列中设置“仅来自子域和域的值”约束。该约束没有问题吗?我无法在“域id/子域id”列中设置“仅限子域和域的值”约束。