我可以看到在这个问题上有类似的问题和答案。 我需要在7列上一起创建一个唯一约束。
alter table ga_data_model add constraint uq_1234596 unique (portal_id,date,dimension,country,os,os_version,theme);
使用前缀键来解决此问题已有各种答案。但是,由于我的数据的性质,仅使用前一个或两个字符来创建索引是危险的,因为这可能导致重复的结果。所以这样的解决方案对我来说不起作用:
alter table ga_data_model add constraint uq_1234596 unique (portal_id,date(2),dimension(2),country(1),os(2),os_version(1),theme(2));
我正在考虑在我的表中创建一个包含这些列的计算哈希的新列,并在此创建约束。但这意味着每次我想在db中插入一些内容时,我都需要先为这个列做一个select,计算新值的哈希值,比较它们并保存/不保存。考虑到我将进行大量的写操作,我认为这有点太贵了。
有没有人遇到同样的问题并且有更好的解决方案,如上所述? 谢谢!
答案 0 :(得分:0)
我想在db中插入一些东西,我需要先为这个列做一个select,计算新值的哈希值,比较它们并保存/不保存
否 - 您保存它,如果您获得了唯一的密钥违规,那么您已经拥有了数据。此外,将哈希计算实现为表触发器 - 这样就没有后门来修改数据。