表的逻辑是否正确?

问题描述 投票:1回答:1

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

int Id,

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

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

sql sql-server tsql
1个回答
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
);

请注意,我认为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,直接启用所有日期函数。

© www.soinside.com 2019 - 2024. All rights reserved.