AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1479717
Accepted
Digital_ecologist
Digital_ecologist
Asked: 2019-09-07 08:14:53 +0800 CST2019-09-07 08:14:53 +0800 CST 2019-09-07 08:14:53 +0800 CST

如何在 Microsoft Access 中处理多对多关系?

  • 772

我正在尝试建立一个新的访问数据库,将植物与它们所含的化学物质联系起来。我知道这是多对多的关系,因为许多植物可以含有相同的化学物质,而同一种植物显然可以含有多种化学物质。我试图建立一个连接表,并以这种方式创建多对多关系,但我仍然不清楚,因为我正在构建数据库并输入数据,我如何判断访问哪些化学物质在哪些植物中?任何帮助将不胜感激,因为我需要快速开始这个项目。

database microsoft-access
  • 2 2 个回答
  • 46 Views

2 个回答

  • Voted
  1. simon at rcl
    2019-09-07T08:47:36+08:002019-09-07T08:47:36+08:00

    假设表 Plant 具有主键 PlantId,表 Chemical 具有主键 ChemicalId。

    表 PlantChemical 将有两列:PlantId 和 ChemicalId。这些列中的每一列都应该有一个索引 - 不是唯一索引,因为目的是每个工厂和每个化学品的多个条目,并且您想要从工厂转到化学品(作为下面的示例查询,它需要 PlantId 上的索引)和也从化学品到工厂(所以它需要一个关于 ChemicalId 的索引)。因此,您可能希望将 AutoIncrment 列作为主键(我愿意)。

    然后,您可以将两者与类似的东西联系起来

    select *
    from Plant p
    inner join PlantChemical pc on pc.PlantId = p.PlantId
    inner join Chemical c om c.ChemicalId = pc.ChemicalId
    

    (这可能是 Access 的不正确语法。我记得 Access 对连接的 on 部分中的列名称的顺序有意见,但没有……。现在就访问。0

    • 0
  2. Best Answer
    Olivier Jacot-Descombes
    2019-09-07T10:34:20+08:002019-09-07T10:34:20+08:00

    m-to-n 关系的数据库模式,其中每个植物/化学组合仅存在一次,如下所示:

    Table Plant                                                     Table Chemical
    +-----------+                                                   +--------------+
    |PK PlantID | <----+                                      +---> |PK ChemiclaID |
    +-----------+      |     Table PlantChemical              |     +--------------+
    |   Name    |      |     +---------------------------+    |     |   Name       |
    |           |      +----o|PK FK PlantID              |    |     |              |
    |           |            |PK FK ChemicalID           |o---+     |              |
    +-----------+            +---------------------------+          +--------------+
                             |      Percentage (optional)|
                             |                           |
                             |                           |
                             +---------------------------+
    

    即,在联结表中,主键 (PK) 由PlantID和组成ChemicalID,因为您只想将每种化学品分配给给定植物一次。一个工厂仍然可以拥有许多化学品,并且一种化学品仍然可以分配给许多工厂。

    联结表具有表和表PlantChemical的外键 (FK) 。表的外键应该级联删除,以便您可以轻松删除植物。表的外键不应该级联删除,因为您不应该能够删除植物包含的化学物质。PlantChemicalPlantChemical

    最好在植物和化学名称上建立唯一索引,以加快搜索速度并避免重复条目。

    在 Access 中Plant.PlantID,Chemical.ChemicalID应该是AutoNumber列。

    PlantChemical.PlantID并且PlantChemical.ChemicalID应该是Numeric Long列。


    在 UI 中,让用户从表格中选择一种植物并从Plant表格中选择几种化学品Chemical。PlantID对于这些化学品中的每一种,使用给定的和将一条记录插入到连接表中ChemicalID。

    然后用户将选择另一个植物并在那里做同样的事情。

    • 0

相关问题

  • MS Access 条件格式只比较数字的第一位

  • 在 Access 中输入多值字段是否有更简单的方法?

  • Microsoft Access 2019,一对一关系(SuperType -> SubType)

  • 将电子表格导入 Access 时,如何防止 Excel 自动分配数据字段类型?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve