Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库结构建议_Mysql_Database Design - Fatal编程技术网

Mysql 数据库结构建议

Mysql 数据库结构建议,mysql,database-design,Mysql,Database Design,我被困在数据库设计中。 我必须显示HTML表单字段,并指定对于如此多的表单,哪些字段是必填字段或不必填字段,哪些字段是可见字段或不可见字段 我必须把该选项配置在管理面板。 因此,管理员选择表单和字段,并检查它是否为必填项或不可见项,以及是否为该特定用户设置了配置 注意:-仅当用户更改配置时,否则它们必须来自默认配置 表单表的数据库设计 字段表 表单_字段关系表 所以,从这三个表中,我可以得到所有提供表单数据的数据,也包括哪些字段是必需的和可见的 但是,,我陷入了这样的逻辑:表单字段只有在用户更改

我被困在数据库设计中。 我必须显示HTML表单字段,并指定对于如此多的表单,哪些字段是必填字段或不必填字段,哪些字段是可见字段或不可见字段

我必须把该选项配置在管理面板。 因此,管理员选择表单和字段,并检查它是否为必填项或不可见项,以及是否为该特定用户设置了配置

注意:-仅当用户更改配置时,否则它们必须来自默认配置

表单表的数据库设计

字段表

表单_字段关系表

所以,从这三个表中,我可以得到所有提供表单数据的数据,也包括哪些字段是必需的和可见的


但是,,我陷入了这样的逻辑:表单字段只有在用户更改配置时才会更改设置覆盖,否则它们必须来自默认配置。

如果您希望默认值不是强制性的或可见的,您可以将默认值设置为您使用的任何数据库中的默认值,因此如果useradmin没有指定任何内容

默认设置为用户id=0或-1,并且
用户id>0表示实际用户。

我只需将这两个标志添加到字段表中。因此,对于每个字段,您都有直接的默认值,用户可以在user_fields表中使用自己的条目覆盖这些值

字段表


哦,太好了。谢谢你的提问。我从你的回答中得到了答案。我们可以将所有表单元素存储为一个完整的json字符串吗?从数据库中获取数据后,我们可以在客户端对json数组进行一些处理。将所有数据存储在单个json数组/字符串中是否是一种好的做法?json是一种NoSQL方法。非常适合(比如)可选数据。如果您在产品数据库中存储非常不同的项目,其中衬衫有或没有衣领或口袋,而洗衣机有容量和旋转速度,并且您不想创建复杂的数据库结构来对此进行建模,那么您可以将其存储为XML或JSON。但是使用简单的表单和字段,您将获得什么?这种结构并不复杂,数据很容易在纯关系模型中查询。所以,是的,可以使用JSON,但我不推荐它,因为我觉得它在这里没有任何意义。谢谢你的建议。我将使用您建议的数据库结构。再次感谢您的帮助。是的,我明白了,但在您的解决方案中,我们无法计算出该行的日志,因为我需要同时更改默认核心配置。
form_id - int(11)
form_name - Varchar(255)
screen_ame - Varchar(255)
field_id - int(11)
field_name - Varchar(255)
form_id - int(11)
field_id - int(11)
user_id - int(11)
mandatory - enum('1', '0')  
visible - enum('1', '0')    
field_id - int field_name - varchar(255) form_id - int is_mandatory - bool is_visible - bool field_id - int user_id - int is_mandatory - bool is_visible - bool
select
  f.field_id,
  f.field_name,
  coalesce(uf.is_mandatory, f.is_mandatory) as is_mandatory,
  coalesce(uf.is_visible, f.is_visible) as is_visible
from fields f
left join user_fields uf on uf.field_id = f.field_id and uf.user_id = 321
where f.form_id = 123;