mysql-链接多个表的建议-是这样吗?

sqserrrh  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(483)

关于这张table的布置,有人能给我提个建议吗。
这是第一次设计数据库。这将是它的一部分。
这是一份写报告的申请书。可以指派多个工程师参加任何工作/报告,多个工程师可以编写报告,也可以参加。
这是最好的方法吗。我需要能够搜索与会者和作者分别在应用程序中。
非常感谢你的帮助。

ezykj2lf

ezykj2lf1#

我相信,您有两个包含实体的表。实体是 employee 以及 report .
这些实体具有两种不同的多对多关系: author 以及 attendee .
你的table是这些

  1. employee report
  2. -------- -----
  3. employee_id (PK) report_id (PK)
  4. surname title
  5. givenname releasedate
  6. whatever whatever

那你有两个many:many relationship 彼此具有相同列的表。一个是 author 另一个是 attendee .

  1. author / attendee
  2. ------
  3. employee_id PK, FK to employee.employee_id
  4. report_id PK, FK to report.report_id

请注意复合(两列)主键。

  1. +---------------------+\ /+-------------+\ /+-----------------------+
  2. | +-----+ author +-----+ |
  3. | |/ \+-------------+/ \| |
  4. | employee | | report |
  5. | | | |
  6. | |\ /+-------------+\ /| |
  7. | +-----+ attendee +-----+ |
  8. +---------------------+/ \+-------------+/ \+-----------------------+
  9. \ /
  10. ----- means a many-to-many relationship
  11. / \

当您确定某个员工是某个报表的与会者时,可以在“与会者”表中插入一行,其中包含正确的员工和报表。
例如,如果希望每个报表的所有作者都可以这样做:

  1. SELECT r.title, r.releasedate,
  2. GROUP_CONCAT(e.surname ORDER BY e.surname SEPARATED BY ',')surnames
  3. FROM report r
  4. LEFT JOIN author a ON r.report_id = a.report_id
  5. LEFT JOIN employee e ON a.report_id = e.report_id
  6. GROUP BY r.title, r.releasedate
  7. ORDER BY r.releasedate DESC

这个 LEFT JOIN 操作允许您的查询查找没有作者的报表。普通内胎 JOIN 操作将从结果集中抑制这些行。
这种严格的e:r设计有一个局限性。对于许多类型的报告(例如科学论文),作者的顺序至关重要(你想开始一场学术性的食物大战吗?按错误的顺序列出论文的作者。)
所以您可以创建一个表,其中可能还包含一个序数值。

  1. author
  2. ------
  3. employee_id PK, FK to employee.employee_id
  4. report_id PK, FK to report.report_id
  5. ordinal INT

您的报表查询将包含这一行。

  1. GROUP_CONCAT(e.surname ORDER BY e.ordinal SEPARATED BY ',')surnames
展开查看全部

相关问题