数据库设计:表结构

时间:2016-05-09 14:40:58

标签: sql-server database database-design

我的excel表单包含可以从SQL Server提取数据并在excel表单上显示信息的宏。用户可以更新表单并将宏写入更改回SQL Server。

这是excel表格。用户需要输入黄色突出显示的值。示例John将用户字段输入为'JOHN',按区域'LATAM',年'2016'和月'3'输入。完成后,John会单击“检索”按钮从SQL Server中提取所有数据,其中Region = LATAM,Year = 2016和Month = 3.所有相关信息将显示在字段Area,Region,Mgmt,CompanyCode,AcctUnit,帐户和值(可能有多行记录,用户不允许编辑这些记录)。现在约翰需要为字段注释输入值。完成后,John会单击“保存”按钮,excel宏会将注释值写入SQL Server enter image description here

这里excel宏的表结构将会读写

CREATE TABLE [dbo].[Sales](
[Region] [varchar](10) NOT NULL,
[Area] [varchar](10) NOT NULL,
[Mgmt] [varchar](10) NOT NULL,
[CompanyCode] [int] NOT NULL,
[AcctUnit] [varchar](7) NOT NULL,
[Account] [varchar](10) NOT NULL,
[Comment] [varchar](100) NULL,
[Year] [int] NULL,
[Jan] [float] NULL,
[Feb] [float] NULL,
[Mar] [float] NULL,
[Apr] [float] NULL,
[May] [float] NULL,
[Jun] [float] NULL,
[Jul] [float] NULL,
[Aug] [float] NULL,
[Sep] [float] NULL,
[Oct] [float] NULL,
[Nov] [float] NULL,
[Dec] [float] NULL,
[SYS_CreatedBy] [varchar](15) DEFAULT SYSTEM_USER,
[SYS_CreatedDate] [datetime] DEFAULT GETDATE(),
[SYS_ModifiedBy] [varchar](15) DEFAULT SYSTEM_USER,
[SYS_ModifiedDate] [datetime] DEFAULT GETDATE(),
CONSTRAINT [PK_Sales] PRIMARY KEY NONCLUSTERED
    (
    Region ASC, 
    Area ASC, 
    Mgmt ASC,
    CompanyCode ASC,
    AcctUnit ASC,
    Account ASC,
    )
)

基于上面的表结构,其他用户如何在不影响John已经更新到SQL Server的评论的同时发表他/她的评论?例如,John已经输入了他的评论并且已经更新到SQL Server,现在Alice从SQL Server中拉出相同的数据,其中region = LATAM,Year = 2016和Month = 3.她应该获得与John所做的相同的数据,除了注释字段,其中这个案子应该是空白而不是John的评论。

根据上面的表格设计,评论的价值会随着不同的用户而不断变化。如何重新设计表结构,以便评论对每个用户都是唯一的?

1 个答案:

答案 0 :(得分:0)

我会创建一个Comments表,并通过外键将其与Sales表关联。

为此,我会在Sales表中添加一个代理键,这样您就不需要将所有这些PK列添加到Comments表中。