我正在为学生设计一个数据库。瑞士的计算机科学专业的学生可以在不同的专业之间做出选择,例如应用程序开发、系统工程等。
本申请中也有来自其他专业的学生,他们没有这个专业。几个例子:
+--------------------+-------------------------+
| Profession | Specialization |
+--------------------+-------------------------+
| Computer scientist | |
| | Application development |
| | System engineering |
| | Support |
| | |
| Electrician | |
| | none |
| | |
| Janitor | |
| | none |
| | |
| Architect | |
| | Small buildings |
| | High buildings |
| | |
+--------------------+-------------------------+
我希望你明白了。我现在的问题是,我该如何设计具有这些属性的数据库表,因为它们相互依赖?每个用户都有自己的职业,有些用户根据自己的职业没有专业化。所以电工不应该是应用程序开发人员,也不应该是架构师。
到目前为止我的想法 1
+-----------------------------+
| User |
+-----------------------------+
| #id |
| profession_id |
| specialisazion_id, nullable |
+-----------------------------+
通过约束检查执行逻辑
方法二
+-------------------+ +----------------+ +------------+
| User | | Specialization | | Profession |
+-------------------+ +----------------+ +------------+
| #id | +--| #id | +--| #id |
| username | | | name | | | name |
| specialization_id |--+ | profession_id |--+ +------------+
+-------------------+ +----------------+
自己管理逻辑并确保每个没有专业化的职业都有一个专业化条目。
方法三
+----------------+ +-----------------------------+ +------------+
| Specialization | | spec_prof | | Profession |
+----------------+ +-----------------------------+ +------------+
| #id |--+ | #id | +--| #id |
| name | +--| specialization_id, nullable | | | name |
+----------------+ | profession_id |--+ +------------+
+-----------------------------+
|
|
+--------------+ |
| User | |
+--------------+ |
| #id | |
| username | |
| spec_prof_id |--+
+--------------+
不知何故,所有不同的方法都让人觉得笨拙、肮脏。支持和反对不同方法的论据是什么?有没有更好的办法?
我什至如何搜索这个问题?dependent命名正确吗?
任何帮助是极大的赞赏。