0

我有一个名为 Type_of_installations 的表;它包含几种类型,每种类型都有常见的字段,如cost, guarantee_end, manufacturer...

但是,有些功能仅与某些类型相关,例如

voltage, capacity, hours_per_week, lifting_power, weight, ...

这些可能仅具有某些功能。我记得的一种方法是在每个不规则特征之后添加一个位字段,但我认为有更有效的技术来处理这个问题。我觉得每次都检查每一个不规则的特征位会很累;这是编程时间,而不是更多的处理时间。

设计一组表的最佳方法是什么,其中某些属性仅与主表中的某些行相关?

4

3 回答 3

3

位域会起作用。另一种涉及更多的方法可能是采用 EAV 风格:

“installations”表字段:id、guarantee_end、manufacurer
“options”表字段:install_id、option_name、option_value

因此,如果您有一个包含必填字段的“安装”表,其中:

id guarentee_end 制造商
 1 20140101 IBM
 2 20140701 联想

您的“选项”表可能有:

install_id option_name option_value
 1 成本 1000.00
 1 颜色 绿色
 2 富吧

您存储的内容不超过每条记录所需的内容,而无需严格定义这些可能的选项是什么。您只需根据需要添加它们,并加入 install_id 字段以查询它们。

于 2013-01-03T18:10:42.113 回答
2

如果您可以定义这些始终一起出现的可选列的子集,您可以创建子表,每个子表都包含一个子集并使用外键链接到主表。

就像是:

MainTable(id int, guarantee_end int, manufacturer int)
Electric(id int, voltage float, watts float, mainTableID int foreign key)

编辑:否则,在不使用字段时只需将字段设置为 NULL,就不需要位字段(在大多数情况下)。您可以将 NULL 字段与上述内容结合起来,以获得一些合理有效且体面的结构化组合。

于 2013-01-03T18:15:11.483 回答
2

NoSQL 可能是处理这类数据的更好途径。

如果您对单个属性不感兴趣,例如从Things Wherelifting_power > 400 中选择*,那么xml 或序列化将是一个不错的选择。

除了经常使用但愚蠢的将所有可能的列放在表中之外,最好的选择是经典的财产包

Thingy(ThingyID、ThingyName 等)属性(PropertyID、PropertyName、PropertyType 等),在这里看到默认、最小和最大各种东西

PropertiesOfThingys(ThingyID, PropertyID, PropertyValue) PropertyValue 将是一个字符串,您将使用 PropertyType 进行翻译

那类的东西

于 2013-01-03T18:15:44.593 回答