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

时间:2015-01-22 20:54:01

标签: sql-server database oracle database-design erd

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

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

我遇到的问题是,product_1需要truck_1通过pick_up JOBcity_A移至city_C通过city_B。与此同时,product_2通过truck_2 JOB pick_upcity_C移至city_A通过city_B移动trucks transfer }。 JOB containers product city truck_1(基本上是city_A并且只返回原点truck_2,即city_C { {1}},返回drop_offJOB,通过CONTAINERSTRUCKS)命令返回{{1}}。

所以我有以下表格:

  • TRUCK (truck_id,truck_code,...)
  • PRODUCT (product_id,product_code,product_name,...)
  • CONTAINER (container_id,container_desc,...)
  • CITY (city_id,city_name,city_desc,...)
  • 路径(path_id,from_city_id,to_city_id,...)
  • SCHEDULE (schedule_id,schedule_name,schedule_desc,start_time,end_time,     ...)
  • TRANSACTION (transaction_id,transaction_name,transaction_desc,...)

如何对{{1}}之间传输{{1}}的上述方案进行建模?

1 个答案:

答案 0 :(得分:1)

据推测,卡车和/或卡车司机的任务涉及经历一系列事件,包括遵循路径并进行交付和交易等。据推测,工作就是这样一种事件,其中有几种,例如皮卡,转移和下车。

关系数据库中的表描述了应用程序的状态。每个表都有一个相关的填充(命名)空白语句(谓词)。基表谓词由设计者提供:

// 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, ...) 

(谓词表征应用程序关系,又称关系,由表格表示,也称为关系,因此"对等模型&#34 ;.)

谓词的参数是表的列。当您为每个参数提供值时,您会得到一个关于您的应用程序的真或假的陈述(命题)。列的一行值为每个命名空白提供了这样的值。使表格的谓词为真的行在表格中。如果为false则会产生的行停留在外面。这就是数据库状态描述应用程序情况的方式。你必须知道表格'语句,以便读取或查询数据库,以便根据其行查找有关情况的真实和错误,并通过在观察情况后准确地将构成真实命题的行放入其中来更新数据库。

每个查询还有一个根据其表的谓词构建的谓词。两个表的JOIN给出了满足谓词AND的行,UNION是OR等等。a query result also holds the rows that satisfy its predicate

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

您需要确定足够的谓词,以便能够完整描述您的应用程序的状态。这包括抽象的东西,比如路线和交易,事件,时间表和作业等。(一旦我们有了足够的谓词/表格,我们就会通过规范化等技术来改进它们。)

当可能存在不同类型的事物时,我们会讨论超类型和子类型,并看到谓词(我将使用" 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,...)
...

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