我正在创建一个Web应用程序,它具有包含一些字段的表单。用户从表单输入数据,但我需要让用户添加或修改或删除字段并在应用程序上自定义表单。 例如,ABC公司具有Web应用程序以通过表单界面存储客户信息。表单默认包含名称,地址,电话字段等,但公司希望存储会员信息并添加一个名为“ Membership No”的文本输入字段。 在后端,需要存储这些自定义的字段和值。
我最初的想法是
客户表
|--------|--------|-------------|--------|
| ID | name | address | phone |
|--------|--------|-------------|--------|
| 1 | Tom | somewhere | 0123456|
|--------|--------|-------------|--------|
字段表
|--------|--------------|
| ID | name |
|--------|--------------|
| 1 | Membership No|
|--------|--------------|
输入表
|------------|----------|----------|
|Customer_ID | Field_ID | Value |
|------------|----------|----------|
| 1 | 1 | ABC00001 |
|------------|----------|----------|
并加入表格
with info as (
select *
from (
select a.Customer_ID, b.name, a.Value
from dbo.Input a
join dbo.Field b
on a.Field_ID = b.ID
) as info
pivot (max(value)
for Name in ([Membership No])) as fields
)
select c.Customer_ID, d.name, d.address, d.phone, c.[Membership No]
from info c
inner join dbo.Customer d
on c.Customer_ID = d.ID
order by Customer_ID`
结果是
|-----------|-------|-----------|---------|--------------|
|Customer_ID| name | address | phone | Membership No|
|-----------|-------|-----------|---------|--------------|
| 1 | Tom | somewhere | 0123456 | ABC00001 |
|-----------|-------|-----------|---------|--------------|
但是客户数量可以是一百万,而自定义字段的数量可以是10或20。
有没有更好的方法来存储动态表?