代码之家  ›  专栏  ›  技术社区  ›  Aspram

表格的逻辑正确吗?

  •  1
  • Aspram  · 技术社区  · 6 年前

    我最近遇到一个SQL表,它的结构如下:

    int id,

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

    此整数列是指定列名“月”和“年”的销售额。我感兴趣的是这个逻辑是否适合sql表。创建另一个表不是更专业吗?在这个表中,我们可以存储几个月,并从上一个表中引用该表, 蒙太尼 例如,这里有另一列 伯爵 ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    我当然希望 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
    );
    

    注意,我认为 对于一个字符串来说是个很糟糕的名字。

    您可以保证每个月有一行限制:

    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)
    );
    

    能够 使用A monthid 具有单独查找表的列。但是,将日期固定到月1日的约束意味着该月可以表示为 date ,直接启用所有日期函数。