我最近遇到了一个具有以下结构的SQL表:
int Id,
INT Id,
NVARCHAR(50) ItemNumber,
INT January,
INT February,
...,
INT December,
INT Year
此整数列是指定的colomn名称月份和年份的销售数量。我感兴趣的是这个逻辑是否适合SQL表。创建另一个表是不是更专业,我们可以存储例如几个月并且从上一个表中引用该表,例如monthId,这里有另一个列Count?
我当然希望year
专栏是今年的,而不是说比如今年的总数。
你的直觉是正确的。我倾向于简单地将其构造为:
create table <whatever> as (
id int identity(1, 1) primary key,
itemCode nvarchar(50),
yyyymm date not null,
amount int -- amount is an arbitrary name for the value column
);
请注意,我认为itemNumber对于字符串来说是一个非常糟糕的名称。
您可以保证每月一行有约束:
create table <whatever> as (
id int identity(1, 1) primary key,
itemCode nvarchar(50),
yyyymm date not null,
amount int,
constraint chk_whatever_yyyymm (day(yyyymm) = 1),
constraint unq_whatever_yyyymm_itemcode unique (itemCode, yyyymm)
);
您可以使用带有单独查找表的monthid
列。但是,将日期固定到该月的第一个的约束意味着该月可以表示为date
,直接启用所有日期函数。