有什么办法可以在数据库上创建动态表?

时间:2019-02-13 07:05:26

标签: sql relational-database

我正在创建一个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。

有没有更好的方法来存储动态表?

0 个答案:

没有答案