我想在对象"Human"和它的父项same type之间建立多对多关系,我想知道这种关系是否存在于真实的项目中,或者有经验的开发人员是如何处理这样的需求的? 完成这项任务的最佳设计是什么? 谢谢!

推荐答案

在关系数据库中,通常多对多关系需要第二个表.

例如:

CREATE TABLE Parentage (
  child_id INT NOT NULL,
  parent_id INT NOT NULL,
  PRIMARY KEY (child_id, parent_id),
  FOREIGN KEY (child_id) REFERENCES Human (id),
  FOREIGN KEY (parent_id) REFERENCES Human (id)
);

这是存储数据的relational种方式,它的优点是导致最少的数据冗余,并以合理的效率支持各种查询.

它还支持一个真正的多对多的关系,其中一个子元素可以有多个父母(可能只有两个亲生父母,但有继父母、监护人和寄养人等,可以有无限数量的人算作父母),以及每个父母都有多个子元素.

如果要优化specific查询的表设计,这是可能的.最佳设计取决于您需要优化的查询,但您还没有描述需要运行的任何特定查询.

Mysql相关问答推荐

MySQL在带有特定属性值上的对象的数组的杨森对象中搜索

MySQL问题难以将文本字符串转换为正确的日期格式

在MySQL中查找具有公共值的列名

为什么MySQL派生条件下推优化不起作用

如何在sql中包含0作为计数?

使用不同的 where 列进行子 Select

在MySQL的join查询中进行计算

GoRM中行最大值查询返回"0"

MySQL中的where语句会 destruct 全外连接.

将时间戳四舍五入到最接近的半小时而不遗漏丢失的数据

如何将数据导入MySQL中的master/replica struct

MySQL,递归 CTE.它如何以这种句法形式工作?

检索按键列值分组的最新日期 (MySql)

为什么以及如何将 Django filter-by BooleanField 查询转换为 SQL WHERE 或 WHERE NOT 而不是 1/0?

MySQL:从 n 个关系表中 Select 所有具有 MAX() 值的行

如何在 MYSQL 中使用多个表进行插值

在另一个 where 语句(子查询?)中使用一个 sql 查询的结果

MySQL错误 1005 (HY000): 无法创建表 'foo.#sql-12c_4' (errno: 150)

如何使用 XML_LOAD() 将 XML 文件导入 MySQL 数据库表;功能

MySQL中的base64编码