Answers:
根据用户输入动态创建新表通常不是一个好主意。如果表单的基本结构发生变化,则所有动态创建的表都需要更新以包括新列或删除旧列,这可能会引起维护麻烦。然后就是知道要查询哪个表的问题(这可能会导致动态SQL,这会带来所有新问题)。而且也可能存在性能问题,但是我不确定那会是多么糟糕。而且,表通常用于表示一种实体类型(例如“ Web表单”),而不是为同一实体的每个新实例具有相同表的副本。
我建议为表格准备一张桌子。在每个表单上都需要一个标识符来标识它是谁的表单:
形式 ----- id(PK) 名称 owner_id(FK到users.id) (其他领域) form_elements ------------- id(PK) form_id(FK到forms.id) element_type_id(从FK到element_types.id) 字幕 (其他领域) element_types ------------- id(PK) 名称 element_list_values ------------------- id(PK) element_id(从FK到form_elements.id) 名称 值 (其他字段?)
您的Web应用程序可以让用户创建要保存在forms
表中的表单,并引用创建的用户(假设您将用户作为适当的实体进行跟踪)。该表格将使用form_elements
该forms
表的引用进行填充,因此他们知道它们属于哪个表格,并且element_types
他们知道它们属于哪种类型。element_types
将存储表单可以具有的不同元素的静态(大部分)静态列表。类型可以是:“文本字段”,“下拉列表”,“单选按钮”,“复选框”。对于“ drop_down_list”和“ radio_buttons”之类的类型,您将需要一个额外的表,可以调用该表element_list_values
来存储这些元素通常具有的列表的可能选项。