具有多个值的实体的最佳设计

4
假设你正在收集一辆车的详细信息,这辆车是红、黑、白三色相间的。前轮使用的是Bridgestone 275/35-18轮胎,后轮使用的是325/30-19轮胎。有时候你只需要两个轮子(是的,这也被认为是一种车辆,叫做摩托车),而有时候你可能需要18个轮子,这些轮子的规格也可能不同。此外,有一些字段始终只有单个值,比如发动机大小(虽然我们可以想象多引擎的车辆,但为了简单起见,我们暂且不考虑这种情况)。
我们目前处理这个问题的策略是为每个可能具有多个值的字段创建一个表。这将导致大量的表格(我们有很多不同的实体需要这样做),并且不太好维护。请问这是最佳策略吗?如果不是,有什么更好的方法呢?
7个回答

1
如果您的应用程序可以考虑,您可能需要了解一下couchdb

1

如果您正在使用关系型数据库,那么您的建议基本上是唯一的方法。正常化理论将为您提供更多信息 - 关于它的维基百科文章非常好,尽管在进入更高级别的规范化水平时,它是一个棘手的理论主题,但例子大多是常识。

假设您有一个车辆表、一个颜色表和一个轮胎类型表(抱歉,这里用了英式拼写),您可能正在定义一个VehicleTyre和VehicleColour表,它作为相关表之间的连接。这种结构实际上非常健康。它不仅直接封装了您想要的信息,而且还让您以自然的方式捕捉诸如哪个轮胎是哪个(例如前左侧是Bridgestone 275/35-18)或汽车涂成红色的程度(例如在VehicleColour表上使用百分比字段)等信息。

您可能希望对车辆类型实体进行建模,以控制有多少个轮胎。虽然这不是从系统中获取工作SELECT查询所必需的,但在用户界面和确定要插入到表中的轮胎数量方面,它可能会非常有用。

我的公司有很多基于这个原则的模式 - 实际上,我们的对象关系框架会自动创建它们来管理多对多关系(有时甚至是一对多关系,这取决于我们如何建模)。我们的几个应用程序有超过150个实体和100多个连接表。除了一些表名令人讨厌地长之外,没有性能问题,也没有对数据可管理性的实质性影响。


0

您正在描述一个星型模式。我认为在您这种情况下,这是相当标准的做法。

编辑:实际上,您的模式与星型模式略有不同,您在每个维度表中使用事实表的主键进行连接,以便可以拥有多个油漆颜色等。无论哪种方式,我认为这是处理实体的好方法。您可以进一步规范化维度表,然后您将拥有一个雪花模式


0

看起来你可能正在查看分层模型

或者也许一个简单的(attr, value)对列表就可以了?


0
如果你正在使用SQL Server,不要害怕存储XML数据类型。我发现这样做可以让像这样的事情变得更加容易。

0

这真的取决于变量本身是否只有一个变量(例如:您可以拥有一组相同类型的可变数量的轮胎,或者一组可变类型的固定数量的轮胎)。

由于您似乎需要具有多个变量(例如,每个轮胎都有特定的类型,且轮胎数量可变),我恐怕最好的解决方案是为您希望自定义的汽车的每个特定区域都有特定的表格。

如果您有一些字段只需在一组值之间进行选择(例如,2、4或6个窗户),则可以简单地使用枚举或使用用户定义域定义新的字段类型(取决于您使用的DBMS)。


0

你目前的策略是正确的。你正在跟踪很多种数据,所以你需要很多表格。这就是现实。数据库管理系统有抱怨吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接