Database design 处理数据库架构中缺少的值?

Database design 处理数据库架构中缺少的值?,database-design,modeling,missing-data,representation,Database Design,Modeling,Missing Data,Representation,假设我有下面的表模式 MONTH VARCHAR(10) HASRAIN BOOLEAN YEAR INTEGER 现在假设某一年,我有11个月的值,但没有剩余月份的值(我们称之为9月) 是否更正确的做法是: 使用零值将记录放入,或 没有留下那个月的记录 我的问题是:如何对数据库架构中的信息缺失进行建模?NULL在存储效率方面可能更合适,尤其是如果您认为其中大多数都没有价值的话。否则,根据您的业务需求,0也可以这样做 此外,您可能需要考虑没有记录的查询是多么容易。比如说在某一年,你有几个月没有

假设我有下面的表模式

MONTH VARCHAR(10)
HASRAIN BOOLEAN
YEAR INTEGER
现在假设某一年,我有11个月的值,但没有剩余月份的值(我们称之为9月)

是否更正确的做法是:

  • 使用零值将记录放入,或

  • 没有留下那个月的记录


  • 我的问题是:如何对数据库架构中的信息缺失进行建模?NULL在存储效率方面可能更合适,尤其是如果您认为其中大多数都没有价值的话。否则,根据您的业务需求,0也可以这样做


    此外,您可能需要考虑没有记录的查询是多么容易。比如说在某一年,你有几个月没有价值。如果将它们保存在特定列的表w 0/NULL中,则聚合将更容易。

    如果不需要了解某个实体的信息来理解另一个实体,则这些信息在认知上互不依赖,并且可以标准化

    在一般实践中,这意味着您应该为这两个实体创建单独的表,并使用外键在它们之间进行引用

    想象一下:

    Table weather_month:
    ------------
    month ENUM('Jan', 'Feb', Mar' ...) NOT NULL,
    year mediumint NOT NULL,
    weather_id mediumint,
    PRIMARY KEY(month, year)
    
    Table weather:
    ------------
    weather_id mediumint NOT NULL
    rain BOOLEAN NOT NULL,
    clouds ENUM('Clear', 'Sparse', 'Thick', 'Cumulus', ...) NOT NULL,
    temperature ENUM('Freezing', 'Thawing', 'T-shirt weather', 'Hot', ...) NOT NULL
    
    这个例子展示了我们是如何知道或者不知道天气的

    如果您在weather_month表中放入大量可为空的字段(这是一种非常常见的方法),那么就不会像此设置中那样清楚地显示您是否观察到了天气


    关系数据库使用NULL作为“我没有价值”,但是你应该真正考虑如何使用它,因为你所做的数据库设计应该为你的数据结构说话,如果它自己说话,你就不必向人们解释它。节省您的时间。

    在我看来像两张桌子:

    CALENDAR
    +----+-----+
    |YEAR|MONTH|
    +----+-----+
    
    WEATHER
    +----+-----+-------+
    |YEAR|MONTH|HASRAIN|
    +----+-----+-------+
    

    所有月份都将包括在日历表中。只有包含天气信息的月份才会包含在天气表中。

    Null或无记录-如果添加零值,您如何区分“根本没下雨”和“我不知道下了多少雨”之间的区别