lon*_*aft 1 php sql database database-design normalization
我有一个动态生成组中元素的表单,所以每次有人提交表单时我都无法确定要向数据库提交多少内容.
Form
-name
-age
-incident (0)
-incident description (0)
-incident (1)
-incident description (1)
-incident (2....)
-incident descritpion (2....)
Run Code Online (Sandbox Code Playgroud)
并且有大约10个可能的动态生成的表单元素组,所以我想我会为整个表单创建一个表,并且每个表依次为动态生成的元素组创建一个表.
formdata
name varchar(30)
age int(2)
incident0 sql
incdient1 sql
Run Code Online (Sandbox Code Playgroud)
那可能吗?或者除了在我的表中创建一大堆我很少使用的列之外还有不同的方式吗?如果我创建了一大堆列会有内存浪费,或者如果这些列中没有提交大量数据会不会产生影响?
您寻求的答案称为架构规范化,它是关系数据库管理系统的典型特征.特殊概念被称为"一对多"关系,其中您有一个与许多事件相关的"形式".这是通过为一个事件提供一个表来实现的,该表中的一个列是对表单表中的id列的数字引用,因此每个事件"知道"它所属的表单.
FORMS
=======
id
name
age
INCIDENTS
============
id
form_id
descrition
Run Code Online (Sandbox Code Playgroud)
然后,SQL可以选择使用join子句:
SELECT forms.name, incidents.description
FROM incidents
JOIN FORMS ON (incidents.form_id = forms.id)
Run Code Online (Sandbox Code Playgroud)