首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何存储只有少数几个可能值的实体?

如何存储只有少数几个可能值的实体?
EN

Stack Overflow用户
提问于 2015-04-27 13:45:33
回答 2查看 43关注 0票数 1

我应该如何存储用户的性别、宗教、政治观点等数据,这些数据是从“男性”、“女性”或“东正教”、“穆斯林”、“犹太教”、“天主教”等最大值列表中选择的?而且这个值是不变的,即使管理员也不能将“女性”更改为其他东西。在数据库中,使用这个2-8值来存储类似的表,并在外键上使用父表进行连接看起来很困难。第二种方法--程序代码中的特殊对象--但是将程序逻辑与数据混合总是很糟糕的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-27 14:25:37

是否有什么东西看起来“奇怪”取决于个人喜好或设计结构。但是,在数据库中存储任何与数据有关的内容是完全合乎逻辑的。即使是一套既定的选择,也会在遥远的将来发生变化。我数不清客户要求我每天、一周甚至几年后改变一组选项的次数,因为我已经确保了这套方案永远不会改变。

将选项列表存储在单独的表中是关系数据库设计的一部分。在我看来,关系数据库设计使得获取一组数据变得很容易,这些数据包括甚至排除了各种选项。

我建议你用一种好的、老式的方式来做,例如:

  1. user (id,user_name)
  2. option (id,option_label)
  3. user_option (id,user_id,option_id)

同时为malecatholic的用户将与两个选项有关联:

代码语言:javascript
运行
复制
Table user          Table option           Table user_option
+----+-----------+  +----+--------------+  +----+---------+-----------+
| id | user_name |  | id | option_label |  | id | user_id | option_id |
+----+-----------+  +----+--------------+  +----+---------+-----------+
|  1 | john      |  |  1 | male         |  |  1 |       1 |         1 |
|  2 | melody    |  |  2 | female       |  |  2 |       1 |         6 |
|  3 | gerald    |  |  3 | orthodox     |  +----+---------+-----------+
+----+-----------+  |  4 | muslim       |
                    |  5 | judaism      |
                    |  6 | catholic     |
                    +----+--------------+

可以使用以下查询来显示每个用户所选的所有选项:

代码语言:javascript
运行
复制
SELECT `u`.*, GROUP_CONCAT( `o`.`option_label` SEPARATOR ', ' ) AS `options`
FROM `user` AS `u`
LEFT JOIN `user_option` AS `uo` ON `uo`.`user_id` = `u`.`id`
LEFT JOIN `option` AS `o` ON `uo`.`option_id` = `o`.`id`
票数 0
EN

Stack Overflow用户

发布于 2015-04-27 13:51:13

它必须放在一张桌子里,即使它让你加入。连接将在PK上完成,因此几乎没有开销。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29897562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档