我对数据库知之甚少,但这里我正在尝试设计一个数据库。通常我可以设计一个简单的数据库,但是这个场景让我很困惑。
假设我有三个主要实体,即组织、组织的培训师和独立培训师。
在我的系统中,组织可以添加课程并为其添加的课程分配组织的培训师。该组织的培训人员不能添加课程,但他们只能在课程中添加课程。
而一个与任何组织没有任何关系的独立培训师,既可以做这两件事,也可以增加课程,并在其中增加课程。
所以我的问题是,组织的培训师和独立培训师是否应该有一个像这样的组合表:-
| Organization |
----------------
| id |
| name |
| Trainer |
-----------
| id |
| org_id |
| name |
| Course | | Lesson |
---------------- ----------------
| id | | id |
| org_id | | ind_train_id |
| ind_train_id | | org_train_id |
| name | | name |或他们是否应该分开:-
| Organization | | Organization's trainer |
---------------- --------------------------
| id | | id |
| name | | org_id |
| name |
| Independent Trainer |
-----------------------
| id |
| name |
| Course | | Lesson |
---------------- ----------------
| id | | id |
| org_id | | ind_train_id |
| ind_train_id | | org_train_id |
| name | | name |如果它们应该结合在一起,那么教练员表中的外键(教练是独立的)会发生什么呢?当其他(组织的培训师)从Organization表中获得父密钥时,它是否为null?如果执行此方法,将来会有什么问题吗?
如果不应该组合它们,那么两个表中的所有列不是都是多余的(因为尽管有组织外键属性,它们的属性也是相同的)吗?
发布于 2017-02-23 05:29:32
我更喜欢第一种方法,因为它基于“外键可以为空”的规则。
这就是为什么外键的空概念被设计用来记住这样的情况。
使用第一种方法的优点是不需要处理一个额外的表,并且可以在没有任何问题的情况下节省大量的开发和维护时间。
当然,也要确保外键不受限制。
https://stackoverflow.com/questions/42407619
复制相似问题