表格的逻辑正确吗?

时间:2019-02-16 14:50:38

标签: sql sql-server tsql

我最近遇到了具有以下结构的SQL表:

int ID

INT Id,
NVARCHAR(50) ItemNumber,
INT January,
INT February,
...,
INT December,
INT Year

此整数列是指定列名称月份和年份的销售数量。我对此逻辑是否适合SQL表感兴趣。创建另一个表不是更专业,我们可以在其中存储例如月份,并从上一个表(例如 monthId )中引用该表,并在其中另外一个列 Count

1 个答案:

答案 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,直接启用所有日期功能。