Mysql 好的,任何方法都需要一些努力来分离位/列/字符串,以在屏幕上构建按钮。这可能与构建屏幕的工作量差不多,也可能比构建屏幕的工作量要小。性能也一样

Mysql 好的,任何方法都需要一些努力来分离位/列/字符串,以在屏幕上构建按钮。这可能与构建屏幕的工作量差不多,也可能比构建屏幕的工作量要小。性能也一样,mysql,sql,database-design,query-optimization,database-normalization,Mysql,Sql,Database Design,Query Optimization,Database Normalization,我强烈建议您选择两种解决方案并同时实施。你会发现 它们在性能、金额代码等方面的相似程度 这个问题是多么微不足道 关于数据库,您学到了多少额外的东西 “尝试”和“抛弃”另一种做事方式是多么容易 延迟、性能等方面的差异是微不足道的。(这是我们真正为您解答的问题。) 大局 您已经指出了此数据结构的一个用途。我担心这种数据结构还有或将有其他用途。而其他因素才是决定哪种方法最好的真正因素。(此时,您可以愉快地恢复被丢弃的版本!) 第四条路 JSON。但它比您的VARCHAR方式更冗长(占用更多空间)。

我强烈建议您选择两种解决方案并同时实施。你会发现

  • 它们在性能、金额代码等方面的相似程度
  • 这个问题是多么微不足道
  • 关于数据库,您学到了多少额外的东西
  • “尝试”和“抛弃”另一种做事方式是多么容易
  • 延迟、性能等方面的差异是微不足道的。(这是我们真正为您解答的问题。)
大局

您已经指出了此数据结构的一个用途。我担心这种数据结构还有或将有其他用途。而其他因素才是决定哪种方法最好的真正因素。(此时,您可以愉快地恢复被丢弃的版本!)

第四条路


JSON。但它比您的VARCHAR方式更冗长(占用更多空间)。它可能更容易使用,也可能不容易使用——这取决于其他需求。

很好的解释。作为问题作者的补充信息,我还建议在JOIN table
user\u service
中的
user\u id+service\u id
中设置主键。这是一个很好的实践,因为您将无法插入重复的记录,并且您可能不需要没有角色的Id列。很好的一点@zi ax,谢谢。请参阅我的编辑。@O.Jones excelent。我不明白的是。你说选择2更好。然后你说“永远不要在数据列中存储逗号分隔的列表”,但这是选项2,选项1是不同服务的多个列。让我们看看我是否理解你,你将创建3个表,一个用于用户,一个用于加入用户/服务,另一个用于服务(这将使用id标识服务,每行一个)。在users\u serv表中,您可以将用户id作为一行,并将几个列与用户具有的不同服务id(但不是在数组中,而是在不同的列中)放在一起,这是一个很好的解释。作为问题作者的补充信息,我还建议在JOIN table
user\u service
中的
user\u id+service\u id
中设置主键。这是一个很好的实践,因为您将无法插入重复的记录,并且您可能不需要没有角色的Id列。很好的一点@zi ax,谢谢。请参阅我的编辑。@O.Jones excelent。我不明白的是。你说选择2更好。然后你说“永远不要在数据列中存储逗号分隔的列表”,但这是选项2,选项1是不同服务的多个列。让我们看看我是否理解你,你将创建3个表,一个用于用户,一个用于加入用户/服务,另一个用于服务(这将使用id标识服务,每行一个)。在users\u serv表中,您可以将用户id作为一行,并使用用户具有的不同服务id(但不是在一个数组中,而是在不同的列中)放置多个列
+-----------+    +-------------+     +-----------+
|user       |    |user_service |     |service    |
+-----------+    +-------------+     +-----------+
|user_id    +--->|user_id      |<----+service_id |
|givennamee |    |service_id   |     |name       |
|surname    |    +-------------+     +-----------+
|is_active  |
+-----------+