请求非结构化表格

时间:2017-05-16 07:57:10

标签: mysql sql

我有一个关于如何为这种用例构建数据库的问题:

我有用户&每个用户都有几个我无法预测的元数据(然后无法放入列中)。

例如:

User1有country = Fr和site = Paris User2具有country = GB和site = London,但is_manager = true

事实上,元数据计数可能会有所不同,然后我考虑使用这样的架构:

enter image description here

但我不知道如何使用元数据country = Fr&提取用户site =巴黎。 我知道的唯一方法是通过执行请求,然后使用Python来完成我在SQL中无法做的事情,这是痛苦的:

SELECT * 
FROM user_has_metadata UHM
JOIN user U
    ON UHM.user_id = U.id
JOIN metadata M
    ON UHM.metadata_id = M.id
WHERE UHM.value = "Fr" OR UHM.value = "Paris"

但这还不够,我必须在此之后处理数据。还有更好的方法吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您计划的架构可以满足您的需求。 SELECT可以是:

SELECT *
FROM user U
WHERE EXISTS
(
    SELECT 1
    FROM user_has_metadata UHM
    WHERE
        U.id=UHM.user_id
        AND UHM.value = "Fr"
)
AND EXISTS
(
    SELECT 1
    FROM user_has_metadata UHM2
    WHERE
        U.id=UHM2.user_id
        AND UHM2.value = "Paris"
)

顺便说一句,我建议在表USER中将“id”重命名为“user_id”,该名称应反映该字段包含的内容,并且应在所有表中调用相同的名称。与metadata_id相同。 此外,最好比较metadata_id值,而不是“值”,因为不同的元数据类型可能相同。