【问题标题】:How Do I Create One-to-One Relationship如何创建一对一的关系
【发布时间】:2020-08-12 21:46:23
【问题描述】:

在这两个表之间创建一对一关系的最佳方法是什么?

这是ER图

这是 Athlete 表的 SQL 语句,但我仍然不确定如何创建 DressingRoom 表

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

【问题讨论】:

  • 请在问题中以文本形式提供示例数据、期望、结果和表格布局。

标签: sql database database-design foreign-keys create-table


【解决方案1】:

这看起来确实像 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 作为主键,并在 studentId 上设置一个 unique 约束(或其他方式周围):

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

【讨论】:

  • 我的教授要求我建立一对一的关系,每个学生必须有 1 个储物柜。我正在尝试这样做,但我仍然对必须创建的唯一键感到困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
相关资源
最近更新 更多