我如何建立一对一的关系
How Do I Create One-to-One Relationship
在这两个 table 之间创建一对一关系的最佳方法是什么?
这是 ER 图
这是运动员 table 的 SQL 声明,但我仍然不确定如何创建更衣室 table
CREATE TABLE Athlete
(
StudentID INT NOT NULL,
FirstName VARCHAR(15) NOT NULL,
LastName VARCHAR(15) NOT NULL,
Gender VARCHAR(9),
Eligibility VARCHAR(15),
CONSTRAINT AthletePK PRIMARY KEY (StudentID),
CONSTRAINT GenderCheck CHECK (Gender IN ('Male', 'Female')),
CONSTRAINT EligibilityCheck Check (Eligibility IN ('Eligible', 'NotEligible'))
);
这看起来确实像 1-N 关系,每个运动员可能有 0 到 N 个储物柜。
以下是此架构的典型 DDL 语句:
create table athlete (
studentID int primary key,
firstName varchar(50),
lastName varchar(50),
gender varchar(5),
eligibility varchar(50)
);
create table dressingRoom (
lockerNumber int,
studentID int references athlete(studentID),
lockerBuilding varchar(50),
primary key (studentID, lockerNumber)
);
重要的是你想要 dressingRoom(studentID )
上的外键引用 athlete(studentID)
.
如果你想要1-1的关系,也就是说每个学生可能只有一个储物柜,那么你可以使用lockerNumber
作为主键,并在[=上设置unique
约束17=](或相反):
create table dressingRoom (
lockerNumber int primary key,
studentID int references athlete(studentID) unique,
lockerBuilding varchar(50),
);
请注意,在这种情况下,创建两个表意义不大。您可以将 lockerNumber
直接存储在 athelete
中,并带有 unique
约束:
create table athlete (
studentID int primary key,
firstName varchar(50),
lastName varchar(50),
gender varchar(5),
eligibility varchar(50),
lockerNumber int unique
);
在这两个 table 之间创建一对一关系的最佳方法是什么?
这是 ER 图
这是运动员 table 的 SQL 声明,但我仍然不确定如何创建更衣室 table
CREATE TABLE Athlete
(
StudentID INT NOT NULL,
FirstName VARCHAR(15) NOT NULL,
LastName VARCHAR(15) NOT NULL,
Gender VARCHAR(9),
Eligibility VARCHAR(15),
CONSTRAINT AthletePK PRIMARY KEY (StudentID),
CONSTRAINT GenderCheck CHECK (Gender IN ('Male', 'Female')),
CONSTRAINT EligibilityCheck Check (Eligibility IN ('Eligible', 'NotEligible'))
);
这看起来确实像 1-N 关系,每个运动员可能有 0 到 N 个储物柜。
以下是此架构的典型 DDL 语句:
create table athlete (
studentID int primary key,
firstName varchar(50),
lastName varchar(50),
gender varchar(5),
eligibility varchar(50)
);
create table dressingRoom (
lockerNumber int,
studentID int references athlete(studentID),
lockerBuilding varchar(50),
primary key (studentID, lockerNumber)
);
重要的是你想要 dressingRoom(studentID )
上的外键引用 athlete(studentID)
.
如果你想要1-1的关系,也就是说每个学生可能只有一个储物柜,那么你可以使用lockerNumber
作为主键,并在[=上设置unique
约束17=](或相反):
create table dressingRoom (
lockerNumber int primary key,
studentID int references athlete(studentID) unique,
lockerBuilding varchar(50),
);
请注意,在这种情况下,创建两个表意义不大。您可以将 lockerNumber
直接存储在 athelete
中,并带有 unique
约束:
create table athlete (
studentID int primary key,
firstName varchar(50),
lastName varchar(50),
gender varchar(5),
eligibility varchar(50),
lockerNumber int unique
);