Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL中实现超类/子类结构?_Mysql_Database_Database Design - Fatal编程技术网

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

如何在MySQL中实现超类/子类结构?,mysql,database,database-design,Mysql,Database,Database Design,这些是我数据库中的表,我需要创建两个超类/子类结构 第一个是 超班船员 子类导演、制片人、其他导演、其他制作、艺术、相机、声音、把手、电气、邮政 第二个是 超类生产者 子类工资、预算 +---------------------+ | Tables_in_film_crew | +---------------------+ | art | | budget | | camera | | crew_member

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

第一个是

超班船员

子类导演、制片人、其他导演、其他制作、艺术、相机、声音、把手、电气、邮政

第二个是

超类生产者

子类工资、预算

+---------------------+
| 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(超类)中包含的内容:

同时,以下是其他_指令(示例子类)中包含的内容:


现在,所有外键都指向来自机组成员的成员ID。所有其他表(Director和Producer除外)都是以类似的方式创建的

首先,您可以遵循一些在创建数据库时必须考虑的一般规则。将不同组共有的信息放在一个表中,将特定数据放在较小的附属表中

我会把船员的一般信息放在第一个表中: 因此,我们将有一个id、姓名、地址以及所有成员的共同点。 然后,通过值crew_member_id创建与“crew member”表相关的“子表”。在此表中,您仅放置与导演、制片人等相关的特定信息

所以这里的字段可能是:id、船员id、导演电影等等

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

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


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

我想到的想法是:
1> 有一个父表作为超类,每个子类的属性都有一个由外键连接的sattelite表。然后可以将其表示为视图

2> 有一个父表作为超类,另一个表用于所有额外属性。这必须由两个外键进行匹配

3> 一张可以放所有班级的桌子。(糟糕的主意)

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

以下是建议第一种方法的更多信息


谢谢你提供的信息,但显然我应该更具体一些。我已经添加了更详细的信息,我相信这些信息与您所说的需要如何构建相关;我真正不明白的是如何建立这些关系。
+-------------+-------------+------+-----+-------------------+----------------+
| 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]  |                |
+-------------+-------------+------+-----+-------------------+----------------+
+---------------+--------+------+-----+---------+----------------+
| 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    |                |
+---------------+--------+------+-----+---------+----------------+