5

我正在使用 .NET(C#、SQL Server)开发一个 N 层应用程序。我从设计数据库开始,因为我相信从底部开始会是一个好主意。现在我需要您在构建数据库时提出非常灵活的建议。知道应用程序旨在构建为一组插件。

该应用程序是用于许多不同硬件设备(汽车、发动机等)的远程控制应用程序。这是数据库表的片段。

  1. 设备表
  2. 人事表
  3. 用户表
  4. 角色表

正如您所看到的,设备表是一个表示我们正在控制的设备的表,并且由于每个设备可能具有比其他设备更多或更少的属性,我想将每个设备链接到它的属性,这些属性可能在另一个表中,即尽可能优雅。人员表适用于负责设备的人员,例如:汽车司机(每辆汽车可能有多个司机)、发动机操作员等。

用户是应用程序用户,如您所见,我已将用户和角色分成两个不同的表。

我正在寻找一种将设备链接到它们的属性的方法。另外,在应用程序中,每个设备都是可连接设备的一个实例。这意味着我可以将一个名为 say: SIM 卡的设备连接到一个名为 Vehicle 的设备上。此外,有没有关于这个主题的设计模式?

在此先感谢,如果我不清楚,请原谅我。

4

3 回答 3

1

根据您将如何处理数据层,此数据库设计可能是一个有争议的问题。如果您将 EntityFramework 与代码优先方法一起使用,您可以使用它创建逻辑实体并从您的模型生成数据库。

大多数基于 ORM 的解决方案都提供了一些从对象关系创建数据库的方法,但是尽管您可以快速轻松地启动并运行数据库,这将完全满足您的需求,但如果您想开始使用您可能会遇到的模式麻烦,虽然你可以做很多推断来帮助它在幕后按照你想要的方式制作数据库。

如果这是一个新建项目,并且您不需要容纳任何遗留数据库系统,我将暂时停止担心您的数据库,只需编写逻辑模型并定义它们的关系,并让数据存储问题自行处理。

于 2012-09-20T10:51:55.363 回答
1

这里真正的设计决策是围绕您的设备和属性表。其他都很标准。

对于一个可以选择与一个或多个属性关联的设备,您真正需要的只是属性表中的一个可为空的外键。但这提出了一个非常重要的问题:某些设备是否有必要具有一组非常特定的属性?您的应用程序是否会期望您的“汽车”设备具有“模型”属性? 我们如何通过这种设计确保数据库的完整性?

您可以通过数据库定义的约束来做到这一点。但是您怎么知道“汽车”设备需要“模型”属性?也许您需要为每个设备定义一个模板:DeviceType 和 PropertyType 表。这样,您的约束将始终知道在更新/插入记录时需要哪些属性。此外,这将使处理应用程序中的数据变得容易。

于 2012-09-20T10:35:10.247 回答
0

没有任何理想的数据库设计。它可以根据您正在操作的信息快速更改。

一种简单的方法是列出设计中的所有类,然后将这些类分解到尽可能低的级别,而不需要任何重复数据。

即使每个设备都有不同的属性,您可以将设备分类到它们各自的组中,并且一个组将具有大部分相似的属性。您可以构建一个包含该组所有属性的属性表。正如您所说,您可以使用 deviceID 和 propertyID 将它们连接到不同的表中。人和设备也是如此。您可以根据您拥有的属性将人员表分成更小的部分。

如果大量表在数据提取方面形成一个集群,您可以考虑为您的解决方案采用星型模式,其中一个事实表(实数)位于中心,相关数据围绕它。

祝你好运!

于 2012-09-20T14:18:56.573 回答