我如何建立一对一的关系

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
);