我试图在MySQL单元格中存储一个数组/一组唯一元素。它将类似于:
user_id liked_friends_id
1 [3,6,4]
2 [1,2,4]
此处 likes_friends_id 是一个存储所有唯一ID的数组/集。
有没有办法实现它? 如何在强制执行唯一数组元素的同时实现对数组/集的推送。
答案 0 :(得分:2)
不要在您的MySQL表格中存储CSV数据。与像Postgres这样的数据库不同,MySQL没有数组类型。相反,将每个用户友好关系存储在一个记录中:
user_id liked_friends_id
1 3
1 6
1 4
2 1
2 2
2 4
继续这种方式使您的数据库相对规范化。如果要确保不存储重复的用户友好关系,请在这两列上添加唯一约束:
ALTER TABLE friends ADD UNIQUE unq_idx (user_id, liked_friends_id)
答案 1 :(得分:1)
也许您可以重新考虑您的架构,以检查您是否确实要将liked_friends_id
存储在同一个表中。您可以将其拆分为另一个表,每个liked friends id
作为主键user_id
的外部约束。这样,您就可以通过MySQL本身强制实现唯一性。
另一种方法是序列化数组并将其存储为varchar
如果您正在使用PHP / Java / ..来处理查询。在这种情况下,您必须通过编程语言强制执行唯一性。