数据库结构建议

时间:2018-01-29 12:11:16

标签: mysql database-design

我陷入了数据库设计的困境。 我必须显示HTML表单字段,指明哪些字段是强制性的,对于这么多表单,是否可以从数据库中看到。

我必须在管理面板中添加该选项以进行配置。 因此,管理员选择表单和字段,并检查它是否是必需的或不可见的,并且为该特定用户设置了该配置。

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

表格表

的数据库设计
form_id - int(11)
form_name - Varchar(255)
screen_ame - Varchar(255)

字段表

field_id - int(11)
field_name - Varchar(255)
form_id - int(11)

form_field关系表

field_id - int(11)
user_id - int(11)
mandatory - enum('1', '0')  
visible - enum('1', '0')    

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

但是,我坚持这样的逻辑,即当用户更改配置时,表单字段只会更改(设置覆盖),否则它们必须来自默认配置。

3 个答案:

答案 0 :(得分:1)

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

字段表

field_id     - int
field_name   - varchar(255)
form_id      - int
is_mandatory - bool
is_visible   - bool

User_Fields表

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;

答案 1 :(得分:0)

如果您希望默认值不是必需的或可见的,您可以将默认值设置为您使用的数据库中的默认值,因此如果用户(admin)未指定任何内容,则将其设置为默认值 enter image description here

答案 2 :(得分:0)

考虑到user_id = 0或-1表示默认设置和 user_id> 0表示实际用户。