如何在同一个表中将一条记录与另一条记录关联起来?

时间:2014-04-12 16:03:13

标签: sql database ms-access entity-relationship

我在Access中创建了一个有线数据库,并生成一个报告,其中列出了电缆两端的连接器。每根电缆都有自己的ID,以及与之关联的2个连接器ID。所有连接器都来自同一个表,并链接到许多其他表。

我需要在一个表(电缆)中的2个字段与第二个表中的2个记录相关联。

我的解决方案是创建另外两个表:主连接器表和辅助连接器表,每个表都包含第一个连接器表中的所有条目。然后,我可以在电缆ID表中为主ID和辅助ID创建列。这个问题是我必须使用相同的数据维护2个额外的表。

我是数据库理论的新手,但我想知道是否有一些先进的方法来解决这个问题?

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

你需要两张桌子 - 你已经有一张桌子了:

Cables
  ID autoincrement primary key
  ...

Cables表应该只描述电缆的属性,而不应该知道电缆如何连接到其他电缆。

第二个表应该是电缆对之间可能的连接列表,以及可选的连接描述信息:

Connections
  Cable1ID long not null constraint Connections_Cable1ID references Cables (ID) on delete cascade
  Cable2ID long not null constraint Connections_Cable2ID references Cables (ID) on delete cascade
  ConnectionDesc varchar(100)

这种表称为联结表或映射表。它用于实现多对多关系。通常,这种关系是在两个不同的表之间(例如学生和课程),但它也适用于关联相同表中的两个记录。

此设计可让您在单个查询中加入CablesConnectionsCables(再次)表格,以获取所需的报告。

答案 1 :(得分:1)

另一种方法是在电缆表中有一个连接器表,然后是两个外键。

 CREATE TABLE connector (
     id INT PRIMARY KEY,
     ...
 );

 CREATE TABLE cable (
     primary_connector_id INT NOT NULL REFERENCES connector(id),
     secondary_connector_id INT NOT NULL REFERENCES connector(id),
     ...
 );

答案 2 :(得分:0)

因此,根据我的理解,您希望将表格链接到另一个表格。

使用外键。通过包含您指向的表的主键将一个表链接到另一个表时使用外键。

CREATE TABLE someTable(
    ID INT PRIMARY KEY
);

CREATE TABLE linkingTable(
    ID INT PRIMARY KEY,
    linked_ID INT,
    FOREIGN KEY (linked_ID) REFERENCES someTable(ID) ON DELETE CASCADE
);
祝你好运。

答案 3 :(得分:0)

在表中创建要连接到其他表的外键。

表一是

+---------------+------------+------+-----+---------+----------------+
| Field         | Type       | Null | Key | Default | Extra          |
+---------------+------------+------+-----+---------+----------------+
| user_id       | int(11)    | NO   | PRI | NULL    | auto_increment |
| name          | varchar(5) | NO   |     | NULL    |                |
| user_group_id | int(11)    | NO   |     | NULL    |                |
+---------------+------------+------+-----+---------+----------------+

表二是

+---------------+---------+------+-----+---------+----------------+
| Field         | Type    | Null | Key | Default | Extra          |
+---------------+---------+------+-----+---------+----------------+
| attendance_id | int(11) | NO   | PRI | NULL    | auto_increment |
| user_id       | int(11) | YES  |     | NULL    |                |
| present       | int(11) | YES  |     | NULL    |                |
| absents       | int(11) | YES  |     | NULL    |                |
+---------------+---------+------+-----+---------+----------------+

表2与user_id上的表一连接为外键