use*_*882 2 ms-access database-design
我是数据库设计的菜鸟,所以请耐心等待。我在 Microsoft Access 中有两个表:
表格1:
| ID | Field1 | Field2 |
|:---|--------|:-------|
| 1 | A | 1 |
| 2 | A | 2 |
| 3 | B | 5 |
| 4 | C | 8 |
| 5 | D | 20 |
| 6 | E | 32 |
| 7 | F | 22 |
| 8 | F | 7 |
Run Code Online (Sandbox Code Playgroud)
表 2:
| ID | Field1 | Field2 |
|:---|--------|:-------|
| 1 | A | one |
| 2 | B | two |
| 3 | B | eight |
| 4 | D | seven |
| 5 | D | twenty |
| 6 | F | thirty |
Run Code Online (Sandbox Code Playgroud)
我试图在基于 Field1 的表之间建立一对多的关系。但是 Field1 在任一表中都不是唯一的。然而,这在概念上是可能的,因为 Field1 中的每个记录在 Field2 中都有相应的记录。我可以创建一个只包含 ID 的中间表
| ID | ID1 | ID2 |
|:---|--------|:-------|
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 2 |
| 4 | 3 | 3 |
| 5 | 5 | 4 |
| 6 | 5 | 5 |
| 7 | 5 | 5 |
| 7 | 7 | 6 |
| 7 | 8 | 6 |
Run Code Online (Sandbox Code Playgroud)
然而,这太乏味了,因为我有数千条记录(上面的表格只是一个简化的例子)。Access 中有没有办法直接关联这些表而不必担心 ID?我知道我曾经能够使用“相关表”功能在 ArcGIS 中执行此操作,所以希望有一种方法可以在 Access 中执行此操作?
您描述的不是一对多关系而是多对多关系,因为该列Field1在两个表中的任何一个中都不是唯一的(请选择更好的名称来描述列和表,“Table1”,“ Table2", "Field1" 对表或列一无所知,非常混乱)。
根据您的要求,我看到两个选项:
如果表 1 和表 2 的行之间的关系仅通过匹配“Field1”值来推断,并且您不需要存储有关该多对多关系的更多信息,那么您不需要任何额外的表全部。Field1各个表中的 2 列 ( ) 足以找到相关数据。您可以在两个表上使用简单连接:
SELECT
a.id AS ID1,
b.id AS ID2
-- any additional column needed from any of the 2 tables
FROM table1 AS a
INNER JOIN table2 AS b
ON a.Field1 = b.Field1 ;
Run Code Online (Sandbox Code Playgroud)如果表 1 和表 2 的行之间的关系不是通过匹配“Field1”值推断出来的(但有额外的条件/要求),或者您需要存储有关关系的额外信息,则需要一个中间表。为了确保(强制)只有具有相同“Field1”的行在该表中实际相关,还必须添加公共列(“Field1”)并参与两个FOREIGN KEY约束。(您还需要UNIQUE对(Fieldd1, ID), 2 个表中的每一个进行约束,以使外键起作用):
CREATE TABLE intermediate
( Field1 VARCHAR(5),
ID1 INT NOT NULL,
ID2 INT NOT NULL,
-- possible extra columns
PRIMARY KEY (ID1, ID2),
FOREIGN KEY (Field1, ID1)
REFERENCES table1 (Field1, ID),
FOREIGN KEY (Field1, ID2)
REFERENCES table2 (Field1, ID)
) ;
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |