我陷入了数据库设计的困境。 我必须显示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')
因此,从这三个表中我可以得到所有提供表单数据的数据,还包括哪个字段是必需的和可见的。
但是,我坚持这样的逻辑,即当用户更改配置时,表单字段只会更改(设置覆盖),否则它们必须来自默认配置。
答案 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)
答案 2 :(得分:0)
考虑到user_id = 0或-1表示默认设置和 user_id> 0表示实际用户。