mysql中的子表数据结构

时间:2017-10-06 13:24:21

标签: mysql

我正在处理我的数据库表我有不同的表,但有两个主表,一个是module_names,第二个是allowed_modules现在module_name是父表{{1}是子表。

module_names

allowed_modules

allowed_modules

-------------------------------------------------
id, module_names, module_status

1  Insert        1
2  Delete        1

-------------------------------------------------

现在在我的子表中有列------------------------------------------------- id, user_id, module_id 1 1 1 2 1 2 ------------------------------------------------- ,其中模块ID与用户id一起插入,这意味着用户已经允许这些模块,现在在子表中有重复的用户ID,我已经完成了之前的项目,但现在当我与我的同事讨论并向他展示这两个表时,他建议我不要在模块ID中插入重复的用户ID,只需将列类型从module_id更改为int,以text格式在允许的模块中插入数据我告诉他那个子表但是他告诉我这不是更好的方法,因为每次如果你得到模块你都要执行循环但是如果它以json encode格式你不必每次都执行循环。

那么什么是更好的方法存储ID单独或只是以json格式编码数据,因为我不希望我的数据库操作像json encode那样来自多个表或其他操作。

3 个答案:

答案 0 :(得分:0)

您的数据库模型在关系模型方面看起来很好。仅加入2个表就不会效率低下。

如果这是更多读取密集型应用程序,那么JSON列会很好。但是这会增加存储空间,因为您需要将模块名称存储在JSON中以避免加入。

答案 1 :(得分:0)

我认为这取决于你的应用程序强度所在的位置,我的意思是,如果你们有一个强大的数据库或一个强大的处理应用程序,我会把这个有效负载留给数据库(你的重复用户ID方法),因为作为一个SQL句子它可以快速处理,即使你有太多模块的用户太多,你可以使用提示和索引来使你的查询更快,并在某些时候用字符串(长json)可能会变得复杂,但是当我开始这个评论,取决于你们如何决定你的应用程序逻辑是强大的数据库还是编程lang。

答案 2 :(得分:0)

json类型只有在您以后不想搜索记录时才可以。 例如,如果我问你有多少用户有权访问module_id = 2? 或者如果我问你user_id = 1允许多少个模块? 你永远不会在json案件中达到这样的要求。

我的建议是,如果你担心重复。 make user_id和module_id列在这种情况下是唯一的,对于同一个用户来说不会重复

ALTER TABLE allowed_modules
ADD UNIQUE KEY `my_unique_key` (`user_id`, `module_id`)