我在Access中创建了一个有线数据库,并生成一个报告,其中列出了电缆两端的连接器。每根电缆都有自己的ID,以及与之关联的2个连接器ID。所有连接器都来自同一个表,并链接到许多其他表。
我需要在一个表(电缆)中的2个字段与第二个表中的2个记录相关联。
我的解决方案是创建另外两个表:主连接器表和辅助连接器表,每个表都包含第一个连接器表中的所有条目。然后,我可以在电缆ID表中为主ID和辅助ID创建列。这个问题是我必须使用相同的数据维护2个额外的表。
我是数据库理论的新手,但我想知道是否有一些先进的方法来解决这个问题?
任何帮助将不胜感激!
答案 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)
这种表称为联结表或映射表。它用于实现多对多关系。通常,这种关系是在两个不同的表之间(例如学生和课程),但它也适用于关联相同表中的两个记录。
此设计可让您在单个查询中加入Cables
,Connections
和Cables
(再次)表格,以获取所需的报告。
答案 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上的表一连接为外键