【发布时间】:2017-01-30 17:10:42
【问题描述】:
我们的应用经过定制,可处理多种不同类型的客户,其中某些设置仅适用于少数或一位客户。而不是不断向客户表中添加可为空的列, 我决定添加一个 [Settings] 表以允许每个设置为一行。
[dbo].[Settings]
[SettingID] [int]
[SettingCode] [nchar](4)
[SettingDescription] [nvarchar](255)
然后通过多对多表链接到 [Customers] 表
[dbo].[Customer_Settings]
[Customer_SettingsID] [int]
[CustomerID] [int]
[SettingID] [int]
我的问题是关于如何处理其中许多设置需要在 [Customer_Settings] 表中添加额外数据类型这一事实。
例如,我们可以有一个设置是需要时间数据类型的“最新交货时间”,或者另一个设置是需要 int 的“直到到期的分钟数”。
我能想到的两种处理方法是将可为空的列添加到 [Customer_Settings] 表中,例如:
[dbo].[Customer_Settings]
[Customer_SettingsID] [int]
[CustomerID] [int]
[SettingID] [int]
[ValueTime] [time] NULL
[ValueInt] [int] NULL
...
这似乎是糟糕的设计。
我能想到的另一种方法是将子表添加到 [Customer_Settings] 表中,例如:
[dbo].[Customer_Settings_Int]
[Customer_Settings_Int_ID] [int]
[Customer_SettingsID] [int]
[Value] [int]
这似乎是规范化的,但也很麻烦。请让我知道其中一个是否明显更好,或者是否有另一种选择。谢谢!
【问题讨论】:
-
你进入了可怕的实体-属性-值模式。
标签: sql sql-server database-design many-to-many entity-attribute-value