有一个具有多个可能值的字段的有效设计是什么?
例如,
favorite_animals:狗,猫,鸟
possible_answers:蛇,蜥蜴,狗,仓鼠,猫,鸟
我想设置它以便查询很简单:
SELECT * FROM table WHERE favorite_animal='dog' OR favorite_animal='cat'
SELECT * FROM table WHERE favorite_animal='dog' AND favorite_animal='cat'
基本上,该字段的值可以是0或更多。
答案 0 :(得分:2)
对于多个值,最有效的方法是使用第二个表来存储可能的值,使用第三个表来存储关联。
customers (id, name, gender ...)
animals (id, name) <-- one row for each animal
customer_animal_assoc (customer_id, animal_id)
如果客户有多个喜欢的动物,则关联表将存储多行。这是一种高效的normalized结构,可根据需要进行扩展。
查询可能如下所示:
SELECT
c.name AS customer_name,
a.name AS animal_name
FROM
customer_animal_assoc caa
LEFT JOIN
customers c ON c.id = caa.customer_id
LEFT JOIN
animals a ON a.id = caa.animal_id
WHERE
a.name = 'cat' AND a.name = 'dog'
答案 1 :(得分:1)
您可以使用IN
子句检查它是否在给定集合中。
SELECT * FROM table
WHERE favorite_animal IN ('dog', 'cat', 'bird');