gpt4 book ai didi

sql - 帮助处理主键和唯一约束

转载 作者:可可西里 更新时间:2023-11-01 07:55:12 25 4
gpt4 key购买 nike

在一个表中我有 3 列:

id
tag1
tag2

id 是主键。

我只希望该表中有一个唯一的 tag1-tag2 组合。

例如,如果一个条目看起来像:

id: 1
tag1: cat
tag2: dog

我不想像下面这样插入第二个条目:

id: 2
tag1: cat
tag2: dog

所以我将所有 3 列设为主键,但问题是第二个条目将被插入,因为它看起来是所有 3 个列的组合。

我该如何解决这个问题,以便只有 tag1 和 tag2 的组合是唯一的?


更新:我在 tag1 和 tag2 上添加了一个唯一约束。但是,仍然可以插入:

id: 3
tag1: dog
tag2: cat

有什么办法可以避免这种情况吗?

最佳答案

您应该保留 ID 作为主键,然后可以为 tag1 和 tag2 创建唯一约束:

ALTER TABLE my_table ADD CONSTRAINT uc_tags UNIQUE (tag1, tag2)

使用唯一约束,您将保证永远不会有两行具有重复的 tag1 和 tag2 值。


编辑:

在您上次更新之后,您无法使用唯一约束来强制执行该更新。请记住,对于数据库,带有 (tag1 = dog, tag2 = cat) 的记录与带有 (tag1 = cat, tag2 = dog) 的记录完全不同。

可能您最好的选择是重新设计您的数据库架构,如下所示:

  • Table "tags"
  • Table "messages" (or whatever you are tagging)
  • Table "tags_messages" with the following fields (message_id, tag_id)

然后您可以简单地将“tag_messages”表的(message_id, tag_id)设置为主键。这将自动强制禁止任何邮件带有重复标签。

一些示例数据:

Table: messages

message_id | title
-------------+------------------
1 | some message
2 | another message


Table: tags

tag_id | tags
-------------+-------------------
1 | cat
2 | dog
3 | duck
4 | horse


Table: messages_tags

message_id | tag_id
-------------+-------------------
1 | 1
1 | 2
2 | 3
2 | 4
2 | 1

关于sql - 帮助处理主键和唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2257846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com