从应用程序向表中添加新列时的数据库设计问题

时间:2012-04-30 21:42:31

标签: sql sql-server sql-server-2008 database-design

我目前正在处理一个项目。现在出现的问题是,我必须处理数据库表中的动态列。

我有一张表Charges,其中将存储与每个Client对应的不同费用金额。假设此表包含以下列 -

Client_Id     Charge_1     Charge_2     Charge_3     Charge_4

现在,管理员可以为客户端应用更多new Charges。在这种情况下,新费用将作为Charges添加到column表格中。这需要在应用程序运行时处理,而不是在数据库设计时。这是我的想法。

但是,它看起来不适合我。

有没有更好的办法处理这个问题?请建议我。

提前致谢。我是这个数据库设计的新手。

2 个答案:

答案 0 :(得分:7)

制作复合表,即ClientCharges

您可以保留原始费用表和客户表格,并在客户费用表中保留以下列:

ClientChargeId,ClientId,ChargeId

在您的费用表中,您可以继续添加(您需要多少费用),然后在ClientCharges表中引用ChargeId。

CREATE TABLE ClientCharges
(
    ClientChargeId          INT IDENTITY(1,1)
    , ClientId              INT 
    , ChargeId              INT
)


INSERT INTO ClientCharges
(ClientId, ChargeId)
VALUES
(1, 1),
(1,2),
(1,3),
(1,4),
(2,1),
(3,1),
(3,2),
(4,3),
(4,4)
  • 客户1的收费为1,2,3和4
  • 客户2已收费1
  • 客户3收费1和2
  • 客户4收费3和4

然后在ClientId和ChargeId字段上添加外键约束。

答案 1 :(得分:5)

听起来你真正想要的是1对多的表关系。

您要做的是创建一个包含两列Client_id和charge的表,然后为每次充电添加一个新行。

我不清楚你打算如何使用它。这些“收费”是个别交易吗?或者他们收取与客户相关的收费类型?无论如何,修改这样的数据模型是不好的形式。

当你有这些重复的字段时,只需将它们作为自己的表。