Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以在SQL表中包含SQL表?(用于动态生成的表单)_Php_Sql_Database_Database Design_Normalization - Fatal编程技术网

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,谢谢。非常欢迎。您对未使用的列感到奇怪是对的。这是规范化的经验法则之一。模式中的每一列都应该用于一条有意义的信息(不是零,也不是多个)。有几个“级别”的标准化。。。欢迎来到我最喜欢的发展之旅!