database - 关系数据库建模的正确方法

标签 database inheritance relational

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

我的数据库有三个表:

[positions]
 - position_id INT
 - position VARCHAR

[employees]
 - employee_id INT
 - position_id INT - FK
 - name VARCHAR
 - birth_date DATE

[vehicles]
 - vehicle_id INT
 - model VARCHAR
 - year VARCHAR
 - color VARCHAR

问题是我必须将一辆车与公司中职位为“司机”的一名员工相关联,并且仅在这种情况下。

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

最后,我想知道是否有其他方法可以在不影响关系数据库或编程的情况下执行此操作。

提前致谢! 抱歉英语不好,这不是我的主要语言。 希望您能理解。

最佳答案

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

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

关于database - 关系数据库建模的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3115525/

相关文章:

mysql - 智能数据库设置/布局

c# - 以基本形式定义的自定义属性在重建时以继承形式丢失其状态

sql - 关系代数 - 笛卡尔积与自然连接?

database - Aerospike:类似关系的东西

Python属性描述符设计: why copy rather than mutate?

php - 如何在PHP中对相关的MySQL记录进行分组?

database - Codeigniter:使用语言助手和数据库的多语言

database - 是否有命令检查 Entity Framework 中是否存在数据库?

c# - 将 SQL 整数转换为组合框的 c# 字符串( Access 数据库)

Java 使用内部类类型扩展类