我最近遇到了具有以下结构的SQL表:
int ID
INT Id,
NVARCHAR(50) ItemNumber,
INT January,
INT February,
...,
INT December,
INT Year
此整数列是指定列名称月份和年份的销售数量。我对此逻辑是否适合SQL表感兴趣。创建另一个表不是更专业,我们可以在其中存储例如月份,并从上一个表(例如 monthId )中引用该表,并在其中另外一个列 Count ?
答案 0 :(得分:2)
我当然希望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
);
请注意,我认为项目 Number 对于一个字符串来说是一个非常糟糕的名字。
您可以保证每月有限制的一行:
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
,直接启用所有日期功能。