【发布时间】:2015-07-14 22:32:30
【问题描述】:
我有一个 MySQL 表,它有五个位置列(洛杉矶、纽约等),其中有一个邻域的列值、一个引用位置的代码(洛杉矶、纽约等)和一个用户 ID .代码和用户 ID 始终存在,并且至少有一个位置列具有值。
理想情况下,我想规范化这张表——但作为一个短期解决方案,我想添加一个约束,上面写着:
“确保用户 ID、代码和位置的唯一组合。”
例如:
row1:用户 ID=1,代码=NY,纽约=布鲁克林,洛杉矶=唐人街
row2:用户 ID=1,代码=NY,纽约=西区,洛杉矶=唐人街
应该允许插入第二行,因为纽约社区不同。
我尝试过常规约束:
ALTER TABLE 位置添加唯一location(user_id, code, new_york);
ALTER TABLE 位置添加唯一location(user_id, code, los_angeles);
但是第二行没有插入,因为上面的第二个约束阻止了它。
没有规范化表,创建此约束的最佳选择是什么?
【问题讨论】:
-
在 user_id、code 和所有位置列上创建唯一约束不能解决您的问题吗? "ALTER TABLE 位置添加唯一位置(user_id, code, new_york, los_angeles, ...);"
-
@jedrzej.kurylo 应该可以,只要他在“其他”位置列中使用 NULL;如果他使用类似 ''(空字符串)或硬编码字符串常量(如 '[IRRELEVANT]'),这可能是他现在的问题。
标签: mysql