如何在MySQL中实现超类/子类结构?

时间:2013-11-12 08:01:30

标签: mysql database database-design

这些是我数据库中的表,我需要创建几个超类/子类结构。

第一个是......

超类-Crew_Member

Subclasses-Director,Producer,Other_Directing,Other_Production,Art,Camera,Sound,Grip,Electrical,Post。

第二个是......

超类制作人

Subclasses-Salaries,Budget

+---------------------+
| Tables_in_film_crew |
+---------------------+
| art                 |
| budget              |
| camera              |
| crew_member         |
| director            |
| electrical          |
| equipment           |
| grip                |
| location            |
| manufacturer        |
| other_directing     |
| other_production    |
| post_production     |
| producer            |
| salaries            |
| sound               |
+---------------------+

那么我将如何创建这些关系呢?

编辑:

也许我应该澄清其他一些事情。

这是crew_member(Superclass)中包含的内容:

+-------------+-------------+------+-----+-------------------+----------------+
| Field       | Type        | Null | Key | Default           | Extra          |
+-------------+-------------+------+-----+-------------------+----------------+
| Member_ID   | int(5)      | NO   | PRI | NULL              | auto_increment |
| Member_Name | varchar(25) | YES  |     | [INSERT EXAMPLE]  |                |
| DOB         | date        | YES  |     | [INSERT EXAMPLE]  |                |
| Address1    | varchar(25) | YES  |     | [INSERT EXAMPLE]  |                |
| Address2    | varchar(25) | YES  |     | [INSERT EXAMPLE]  |                |
+-------------+-------------+------+-----+-------------------+----------------+

同时这是Other_Directing(示例子类)中包含的内容:

+---------------+--------+------+-----+---------+----------------+
| Field         | Type   | Null | Key | Default | Extra          |
+---------------+--------+------+-----+---------+----------------+
| O_Director_ID | int(4) | NO   | PRI | NULL    | auto_increment |
| FAD_ID        | int(5) | NO   | MUL | NULL    |                |
| SAD_ID        | int(5) | NO   | MUL | NULL    |                |
| SUD_ID        | int(5) | NO   | MUL | NULL    |                |
+---------------+--------+------+-----+---------+----------------+

现在所有外键都指的是Crew_Member中的Member_ID。所有其他表(Director和Producer除外)都以类似的方式创建。

2 个答案:

答案 0 :(得分:0)

您可以从遵循创建数据库时必须考虑的一些一般规则开始。将不同组的信息放在1个表中,将特定数据放在较小的卫星表中。

我会将关于机组成员的一般信息放在第一个表格中: 所以我们会有一个id,姓名,地址以及所有成员的共同点。 然后通过值crew_member_id创建与“crew-member”表相关的“子表”。在此表中,您只提供了与董事,生产商等相关的特定信息。

所以这里的字段可能是:id,crew_member_id,定向电影等。

即使使用超类生产者,您也应该以同样的方式工作。通过主键将子类与超类相关联,以便在它们之间建立关系。

我建议你阅读一些关于数据库设计的文章。它可能会在将来挽救你的生命,因为在制作数据库之后,纠正错误会变得更加困难。

http://www.datanamic.com/support/lt-dez005-introduction-db-modeling.html

答案 1 :(得分:0)

是的,这是一个非常好的问题,我也在研究。

我提出的想法是:
1 GT;将父表作为超类,使用sattelite表作为由外键连接的每个子类的属性。然后,您可以将其表示为视图。

2 - ;将父表作为超类,将另一个表作为所有额外属性。这必须通过两个外键加入来匹配。

3>一张表中包含所有类别。(可怕的想法)

还有其他想法,但我认为第一个是最好的选择。

以下是提供第一种方式的更多信息。

http://www.tomjewett.com/dbdesign/dbdesign.php?page=subclass.php