所以我的老板和我在如何最好地设计我们的数据库以存储某些客户的杂项数据存在分歧。
基本上,我们有一堆类似于此格式的表格(为简单起见,使用伪代码):
TABLE [dbo].[SalesData]
[CampaignID] int IDENTITY(1, 1) NOT NULL, (This is the PK)
[CustomerID] int NULL,
[Calls] float NULL,
[Responses] float NULL,
[Sales] float NULL,
[Revenue] money NULL,
[Cost] money NULL,
[WebSales] float NULL,
[Channel] nvarchar(20) NULL
Run Code Online (Sandbox Code Playgroud)
发生的情况是,随着我们获得客户,我们有时被迫为每个客户添加某种自定义数据收集。对于此表,除了 WebSales 和 Channel 仅用于 1 个客户端之外,每个客户端都使用所有内容(我们有大约 20 个)。另一个客户想要跟踪几条新数据,因此,我们要么需要添加更多列,要么将这些数据分拆到相关表中并启动超类型-子类型系统。
我想做的也是剥离 WebSales 和 Channel,并以这种方式为每个客户添加一个表:
TABLE [dbo].[SalesData_Client1]
[CampaignID] int NOT NULL, (PK and FK to the SalesData table)
[WebSales] float NOT NULL DEFAULT 0,
[Channel] nvarchar(20) NOT NULL DEFAULT ''
ADD CONSTRAINT [CK__SalesData_Client1__CustomersCampaignID]
CHECK …
Run Code Online (Sandbox Code Playgroud)