1

为了解释我的问题,我举一个简单的例子:

我的数据库有三个表:

[职位]
 - position_id INT
 - 位置 VARCHAR

[雇员]
 -employee_id INT
 - position_id INT - FK
 - 名称 VARCHAR
 -birth_date DATE

[车辆]
 - vehicle_id INT
 - 模型 VARCHAR
 - 年份 VARCHAR
 - 颜色 VARCHAR

问题是我必须将一辆车与一名在公司担任“司机”职位的员工联系起来,而且只有在这种情况下。

我尝试使用继承并创建另一个名为“Driver”的表,该表具有与一名员工关联的 ForeignKey(1-1 关系),但我无法使其工作,因为在编程阶段我必须手动验证是否选择了位置 id(在 HTML 选择元素中)是“驱动程序”的 id。我认为这不是一个好的编程习惯。

总之,我想知道是否有其他方法可以在不影响关系数据库或编程的情况下做到这一点。

提前致谢!抱歉英语不好,这不是我的主要语言。我希望你能够明白。

4

4 回答 4

5

这是一条业务规则,即“只有职位 = 驾驶的员工才能与车辆相关联”。业务规则通常在编程中实现,这不是一个坏习惯。编程是为编写业务逻辑而设计的。一般来说,在开发任何应用程序时,您将获得大量无法在数据库级别实现的实例。

但是,如果您仍想在数据库级别控制它,那么您可以使用触发器并在插入/更新级别检查此验证。

于 2010-06-25T04:31:04.633 回答
2

不幸的是,关系数据库并没有很好的分层对象存储。您可能会考虑使用某种对象关系模型来伪造它,但您是对的:这不是一个好习惯。或许可以考虑使用专门构建的对象数据存储,而不是传统的 RDBMS。

于 2010-06-25T04:29:55.620 回答
1

有许多方法可以通过各种权衡来做到这一点。Scott Ambler 有一个很棒的页面,列出了带有图表的备选方案。

于 2010-06-25T04:41:05.430 回答
0

做到这一点的最佳方法可能是使用一张EmployeeVehicles将员工与车辆连接起来的表格。是的,这意味着您的应用程序(或者可能是触发器或存储过程)必须确保只有特定类型的Employee实际在 中具有记录EmployeeVehicles,但这些通常是存储业务逻辑的最佳位置。数据库以尽可能最规范的方式存储数据,而不是跟踪特定于业务的规则。据需要知道,一些员工(0..*)可能有车辆(1..*,或者可能是 1..1)。

于 2010-06-25T04:32:54.207 回答