如何让我的数据库更简洁?

aho*_*der 7 database-design

我正在使用 SQLite 为 Android 编写应用程序(如果重要,由 ORMlite 支持)。到目前为止,我处于概念阶段并致力于数据库设计。该数据库旨在包含注册给一个或多个用户的资产集合。我从来没有处理过 SQLite 之外的任何数据,即便如此,我也只制作了几个非常小的数据库。因此,我不确定我是否正确处理了这个设计。当我扩展我的设计时,它开始看起来像一团糟。我的问题是:

  1. 我是否以过多的面向对象的方式设计了这个数据库?作为一名 Java 程序员,这就是设计数据库的意义所在。
  2. 有什么办法可以让数据库看起来不那么乱吗?
  3. 我是否在正确的轨道上?

作为参考,这里有一个较早的更易于阅读的数据库设计原型。尚未分配类型,抱歉。

之前的数据库设计

这是我的问题的更新可视化。

当前的数据库设计

RLH*_*RLH 5

这更多是评论,但由于这是一个值得一提的冗长回复,我将其发布为答案。

您的数据库看起来足以满足您的需求。(嗯,最好可以从图中假设)。我假设UserAccount表有四个表之间存在一个一对多的关系VehicleBookVideoGame以及Movie(从这里开始,在VBVM表)。接下来,我假设Asset表VBVM 表条目之间的每个链接都具有一对一的关系。有了这些信息,我建议将UserAccount_id每个 VBVM 表中的AssetTable.

接下来,似乎Asset总是与四个 VBVM 表之一相关联。考虑到这种类型的设置,我建议创建一个额外的表—— AssetType.

+-----------+
| AssetType |
+-----------+
| id        |
| typeDesc  |
+-----------+
Run Code Online (Sandbox Code Playgroud)

接下来,更新Asset表和每个 VBVM 表以包含一个AssetType_ID字段。AssetType对于每一类资产,该表应包括一个条目。在这种情况下,VehicleBookVideo GameMovie,每一个独特的描述和ID。

您可能出于以下几个原因想要这样做——首先,您现在可以查询Asset表并辨别特定记录中存储的资产类型,而无需将数据链接到其他四个 VBVM 表。当不需要来自四个表的所有信息时,这将加快您对数据的查询。其次,这也提供了一种在与Asset条目相关联的资产类型的文本描述中链接的简单方法。同样,无需链接到 VBVM 表即可弄清楚。

最后,您可能需要考虑以不同方式处理条形码数据。如果条形码是一个简单的查找,您可以将其添加到资产表中。但是,如果条形码值必须是唯一的,则必须将其保存在辅助表中,因为您必须对数据库进行约束。如果将其集成到Asset表格中,您可以这样做,但是,您的车辆数据会导致问题,因为车辆没有条形码。据我所知,大多数(如果不是全部)主要数据库引擎都不允许您定义唯一字段,该字段也允许null值,因为数据不再是唯一的。

您可能倾向于认为可以将该Barcode字段与VIN. 既然 VIN 是唯一的,而 Barcodes 是唯一的,两者都不应该相同,为什么不能将它们组合到Asset表中的一个字段中,这样您就可以删除附加Barcode表。我不会推荐这个,因为我认为它使数据不那么“焦点”。

是的,它是唯一对象 ID 的一种形式,但条码是条码,VIN 是 VIN——两者背后的概念完全不同,合并两者可能会随着时间的推移而变得混乱。此外,如果您将来扩展您的项目,可能会导致冲突。从技术上讲,我认为这没有什么大问题(就您而言),但我仍然强烈建议您避免使用该选项。

此外,我也会将assetType_id加到Barcode表格中,原因与您将其加到Asset表格中的原因相同。