【发布时间】:2015-01-15 21:23:04
【问题描述】:
我正在寻找一种模式来处理可选字段。存在该字段的记录与没有该字段的记录是唯一的。
让我们以一种成分为例。
成分具有名称(标题)、类别名称和可选的品种名称。
+---------------+-------+----------+
| ID_Ingredient | Title | Category |
+---------------+-------+----------+
一个例子是苹果。对于某些食谱,任何苹果都足够了。但是苹果有不同的品种,例如“Granny Smith”和“Red Delicious”。一些苹果派食谱要求混合格兰尼史密斯和麦金托什品种。
为了处理这种困境,品种是可选的。
我目前的架构是有两个表:Optional_Variety 和 Variety:
+------------+--------------+
| ID_Variety | Variety Name |
+------------+--------------+
+---------------+------------+
| ID_Ingredient | ID_Variety | // Optional_Variety table
+---------------+------------+
如果一种成分有品种,可以通过搜索Optional_Variety 表找到该品种。
我的困境是,如果一种成分有多种,那么它应该有一个唯一的ID_Ingredient 标识符。毕竟,Granny Smith 苹果与 Red Delicious 苹果不同(外观和味道),所以它们应该是独特的成分。
我的另一个解决方案是在成分记录中包含品种字段:
+---------------+-------+----------+---------+
| ID_Ingredient | Title | Category | Variety |
+---------------+-------+----------+---------+
我对这个架构的问题是许多成分没有多样性,而且我会因为有空字段而浪费数据库空间。
在我的实际实现中,成分的可选字段有很多,因此空字段浪费的数据库空间量会成倍增加。
问题是:
处理带有可选字段的记录的架构是什么,这样当该字段存在时,它与没有该字段的记录不同(也就是具有唯一标识符)?
平台:Windows 7 上的 MySql,64 位; MySQL Windows Vista,32 位;
我正在使用带有对象关系映射的 C++ ODB 与数据库交互。
【问题讨论】:
标签: mysql database orm relational-database database-normalization