Php 是否可以在SQL表中包含SQL表?(用于动态生成的表单)
我有一个表单,可以动态地生成组中的元素,所以我无法确定每次有人提交表单时,我将向数据库提交多少内容Php 是否可以在SQL表中包含SQL表?(用于动态生成的表单),php,sql,database,database-design,normalization,Php,Sql,Database,Database Design,Normalization,我有一个表单,可以动态地生成组中的元素,所以我无法确定每次有人提交表单时,我将向数据库提交多少内容 Form -name -age -incident (0) -incident description (0) -incident (1) -incident description (1) -incident (2....) -incident descritpion (2....) 大约有10个可能的动态生成的表单元素组,所以我想我应该为整个表单创建一个表,为
Form
-name
-age
-incident (0)
-incident description (0)
-incident (1)
-incident description (1)
-incident (2....)
-incident descritpion (2....)
大约有10个可能的动态生成的表单元素组,所以我想我应该为整个表单创建一个表,为每个动态生成的元素组创建一个表
formdata
name varchar(30)
age int(2)
incident0 sql
incdient1 sql
可能吗?
或者除了在我的表中创建一大堆我很少使用的列之外,还有其他方法吗?
如果我创建一大堆列,会不会有内存浪费,或者如果这些列中提交的数据不多,会不会没有什么不同?您寻求的答案称为模式规范化,这是关系数据库管理系统的典型特性。这个特定的概念被称为“一对多”关系,其中你有一个与许多事件相关的“形式”。这是通过仅为事件创建一个表来实现的,该表中的一列是对forms表中id列的数字引用,因此每个事件“知道”它所属的表单 然后,SQL可以选择在选择以下内容时使用join子句:
SELECT forms.name, incidents.description
FROM incidents
JOIN FORMS ON (incidents.form_id = forms.id)
您寻求的答案称为模式规范化,它是关系数据库管理系统的典型特性。这个特定的概念被称为“一对多”关系,其中你有一个与许多事件相关的“形式”。这是通过仅为事件创建一个表来实现的,该表中的一列是对forms表中id列的数字引用,因此每个事件“知道”它所属的表单 然后,SQL可以选择在选择以下内容时使用join子句:
SELECT forms.name, incidents.description
FROM incidents
JOIN FORMS ON (incidents.form_id = forms.id)
如果有一天你不想有10个事件,而是20个,你会改变你所有的代码吗?您应该以规范化的方式创建表。因此,您创建了两个表 第一个表格:表格(表格id、姓名、年龄)
第二个表格:事件(事件Id,表格Id,描述)如果有一天你不想有10个事件,而是20个,你会改变你所有的代码吗?您应该以规范化的方式创建表。因此,您创建了两个表 第一个表格:表格(表格id、姓名、年龄)
第二个表:事件(事件Id、表单Id、描述)标准SQL有行类型和多集类型 MULTISET几乎在所有方面都与表相似/相同,尽管它们并不完全相同 因此,是的,标准SQL支持由行组成的表的概念,其中有一列(或更多列)的值本身就是多集 不要问我哪些可用的SQL产品有效地支持它(*),或者在任何给定的ORM引擎样本中如何与这些列交互
(*)答案很可能是“根本没有”。支持此功能的系统也应该支持最不常用的操作符(以及它的相反方向的对应项,其名称卡在我的大脑和键盘之间的某个地方),但即使像DB2这样的引擎似乎也不支持它。标准SQL有行类型和多集类型 MULTISET几乎在所有方面都与表相似/相同,尽管它们并不完全相同 因此,是的,标准SQL支持由行组成的表的概念,其中有一列(或更多列)的值本身就是多集 不要问我哪些可用的SQL产品有效地支持它(*),或者在任何给定的ORM引擎样本中如何与这些列交互
(*)答案很可能是“根本没有”。支持此功能的系统也应该支持最不常用的运算符(以及它的相反方向的对应项,其名称卡在我的大脑和键盘之间的某个地方),但即使像DB2这样的引擎似乎也不支持它。所谓数据库,你指的是表吗?所谓数据库,你指的是表吗,您使用什么数据库管理系统?MySQL、SQL Server、Oracle?是的,我是说表对不起,我使用MySQL。是的,您可以在MySQL数据库中添加任意数量的表。答案是找到一个逻辑数据结构,可以在普通表中表示表单字段。不是表中的表。数据库指的是表吗?数据库指的是表吗?使用的是什么数据库管理系统?MySQL、SQL Server、Oracle?是的,我是说表对不起,我使用MySQL。是的,您可以在MySQL数据库中添加任意数量的表。答案是找到一个逻辑数据结构,可以在普通表中表示表单字段。不是桌子里的桌子。啊。。这似乎是做这件事的方法。。那么我将研究关于模式规范化的mroe,谢谢。非常欢迎。您对未使用的列感到奇怪是对的。这是规范化的经验法则之一。模式中的每一列都应该用于一条有意义的信息(不是零,也不是多个)。有几个“级别”的标准化。。。欢迎来到我最喜欢的发展之旅!啊。。这似乎是做这件事的方法。。那么我将研究关于模式规范化的mroe,谢谢。非常欢迎。您对未使用的列感到奇怪是对的。这是规范化的经验法则之一。模式中的每一列都应该用于一条有意义的信息(不是零,也不是多个)。有几个“级别”的标准化。。。欢迎来到我最喜欢的发展之旅!