pez*_*ser 7 database many-to-many one-to-many junction-table
根据定义,连接表(桥接表/链接表)用于多对多关系,如下所示:
CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)
CREATE TABLE Permissions
(
PermissionKey varchar(50) PRIMARY KEY,
PermissionDescription varchar(500) NOT NULL
)
--This is the junction table.
CREATE TABLE UserPermissions
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
PermissionKey varchar(50) REFERENCES Permissions (PermissionKey),
PRIMARY KEY (UserLogin, PermissionKey)
)
Run Code Online (Sandbox Code Playgroud)
但是它也不能像一对多关系那样容易使用,就像在这个例子中一个用户与许多订单相关联:
(我不太了解数据库,所以如果我误解了某些内容,请纠正我.)
CREATE TABLE Users
(
UserLogin varchar(50) PRIMARY KEY,
UserPassword varchar(50) NOT NULL,
UserName varchar(50) NOT NULL
)
CREATE TABLE Orders
(
OrderKey varchar(50) PRIMARY KEY,
OrderDescription varchar(500) NOT NULL
)
--This is the junction table.
CREATE TABLE UserOrders
(
UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (UserLogin, OrderKey)
)
Run Code Online (Sandbox Code Playgroud)
没有任何理由不能将联结表用于一对多关系.问题通常是表现.为什么在不需要时让数据库加入另一个表?
这将是多对多:
CREATE TABLE UserOrders
(UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (UserLogin, OrderKey));
Run Code Online (Sandbox Code Playgroud)
这将是一对多(一个用户有多个订单):
CREATE TABLE UserOrders
(UserLogin varchar(50) REFERENCES Users (UserLogin),
OrderKey varchar(50) REFERENCES Orders (OrderKey),
PRIMARY KEY (OrderKey));
Run Code Online (Sandbox Code Playgroud)
请注意 PRIMARY KEY 约束的差异。
| 归档时间: |
|
| 查看次数: |
6518 次 |
| 最近记录: |