数据库设计和建模特定关系

Database design and modeling specific relationships

我正在尝试实施运输和跟踪解决方案。

TRUCKS通过特定SCHEDULES上的指定PATHSPRODUCTSCITY移动到另一个CITYTRUCKS 通过 CONTAINERS 传输 PRODUCTS。这些 TRUCKS 是通过 JOBS 指示的,例如 pick_uptransferdrop_off

我遇到的问题是 product_1 需要通过 pick_up JOBtruck_1city_A 移动到 city_C 通过 city_B。同时,product_2truck_2 通过 pick_upJOBcity_C 移动到 city_A 通过 city_B. trucks 都可以 transfer (JOB) 他们的 containers (本质上是 product 并且只是回到他们的原点 city,即 truck_1,返回 city_A,对于 truck_2,通过 drop_off (JOB) 的命令返回 city_C

所以我有以下表格:

我如何模拟上述 CONTAINERSTRUCKS 之间传输的场景?

大概是卡车 and/or 卡车司机的任务涉及经历一系列事件,包括沿着路径行驶、进行送货和交易等。大概一份工作就是这样的事件,其中有几个种类,例如上车、中转和下车。

关系数据库中的 table 描述了应用程序的状态。每个 table 都有一个关联的 fill-in-the-(named-)blanks 语句(谓词)。基础 table 谓词由设计者给出:

// truck [truck_id] has code [truck_code] and ...
TRUCK (truck_id, truck_code, ...)
// product [product_id] has code [product_code] and name [product_name] ...
PRODUCT (product_id, product_code, product_name, ...) 

(谓词表征应用关系,又名关系,由 table 表示,又名关系,因此 "the relatonal model"。)

谓词的参数是table的列。当您为每个参数提供值时,您会得到一个关于您的应用程序是对还是错的陈述(命题)。列的一行值为每个命名的空白给出了这样的值。使 table 的谓词为真的行进入 table。 if false 的行留在外面。这就是数据库状态描述应用程序情况的方式。您必须知道 table 的陈述才能读取或查询数据库,以找出每行关于某种情况的真假,并通过准确地将提出真命题的行放入数据库来更新数据库观察情况后。

每个查询还有一个从其 table 的谓词构建的谓词。两个 table 的 JOIN 给出满足其谓词的 AND 的行,UNION OR 等。并且 a query result also holds the rows that satisfy its predicate.

(约束与此无关;它们只是共同描述了给定谓词可能出现的数据库状态和可能出现的应用程序状态。)

您需要选择足够的谓词才能完整描述您的应用程序的状态。这包括抽象的东西,如路线、交易、事件、时间表和分配等。(一旦我们有足够的 predicates/tables 我们通过规范化等技术改进它们。)

当我们谈论超类型和子类型时可以有不同种类的东西,并看到像这样的谓词(我将使用 "job",我认为它是一个事件):

// job [job_id] for trucker [trucker_id] is ... stuff about all jobs ...
JOB(job_id, trucker_id...)
// job [job_id] is a pickup with ... stuff about pickups ...
PICKUP(job_id, container_id...)
// job [job_id] is a transfer with ... stuff about transfers
TRANSFER(job_id,...)
...

(您可能有也可能没有不同或额外的转移概念,作为具有两个或更多相关容器等的事件)(搜索 "subtypes"。Eg.