SQL 属性值与索引的映射

SQL Mapping values of attributes with indexes

考虑到我有以下3个属性:

WeatherCondition
 - rainy
 - sunny
 - cloudy

Daytime
 - day
 - night

RoadType
 - city
 - highway
 - underconstruction

我想用索引映射这个值(day - 1,night - 2,等等)

我的问题是,考虑到任何时候我想为一个属性或什至新属性添加 2-3 个更多选择,我应该怎样做?

解决方案1:

AttributessTable:

ID  AttributeType   AttributeValue
AT1 WeatherCondition    rainy
AT2 WeatherCondition    sunny
AT3 Daytime             day
AT4 Daytime             night
AT5 WeatherCondition    cloudy

方案二: 为每个只有 2 列(ID 和值)的属性分隔 tables。 WeatherCondition table 具有值(1,多雨;2,晴天;3,多云) 白天 table 具有值(1,天;2,夜)

我不太愿意使用第二种解决方案,认为我可能必须创建 30 个 tables。

最后的结果是,我想要一个 "lookup" 或 "bridge" table,其 ID FK 来自另一个 table,如下所示:

FinalConditions 
ID  Attribute
1   AT1
1   AT3
1   AT5
2   AT2
2   AT5

此外,通过将所有这些数据一起加入来创建报告对我来说很重要,我认为使用解决方案 2 将更难加入总共 30 tables。

我认为这一切都归结为可伸缩性 - 表格预期容纳多少行(所有这些,总和)。如果它们永远不会高于 10k,您不必担心 - 解决方案 1 就可以。

但是,如果您希望最终的数字达到,比如说,数百万行,解决方案 2 绝对是可行的方法 - 它会导致更少的锁,并且可能会容易得多维护(尽管更难实施 - 您可能必须 "create 30 tables")。

希望对您有所帮助。