记忆用户详细信息和首选项的最佳结构

时间:2014-04-22 11:34:45

标签: mysql sql

我有一个域名,每个用户都有一些信息 关于他自己的heightweighteye colorhair color...以及关于其理想合作伙伴的非常相似的数据(preferred height,{{1 },preferred hair color)。

我必须让用户尊重他们的特点和他们的偏好,牢记这一点,在性能方面最好的结构是什么?

我的意思是,我可以设计一个表格,如:...和用户表:Details(id, height, weight, eye_color, ...)或类似User(id, ..., details_id, preferences_details_id)的表和连接表。甚至还有其他方法。

你会选择什么?为什么?

2 个答案:

答案 0 :(得分:1)

评论时间有点长。

我投票决定特别关闭这个问题,因为你要求提出意见和解释。您应该查看FAQ有关Stack Overflow的问题。

此外,你已经践踏了一个几乎可以成为宗教热情主题的地区。热心的“关系主义者”会希望您将所有列放在一个表中。并且有充分的理由。实体 - 属性 - 价值模型(EAV)的支持者有强烈支持这种方法的论据。并且,它们之间存在混合。我建议你从研究EAV模型开始。您可能能够找出更适合您特定环境的内容。

答案 1 :(得分:0)

这一切都取决于你想用这些数据做什么

Details(id, height, weight, eye_color, ...)

如果细节数量不变并且出于某种原因你不想把它放在用户模型中,那就没问题

Detail(id, type, value)

如果细节数量可以改变,这种方法会更好,因为您不需要“永远”修改数据库,所有细节数量/细节类型/可能值的更改都可以在代码中处理。不同之处在于,无论何时您想要添加详细信息,您都可以为每个人提供默认值,而不是仅添加列。

就性能而言,连接2个表总是比在某种程度上从单个表中选择要慢。