Как мне создать отношения один-к-одному - PullRequest
0 голосов
/ 29 апреля 2020

Каков наилучший способ создания взаимно-однозначных отношений между этими двумя таблицами?

Вот диаграмма ER

enter image description here

Вот оператор SQL для таблицы Athlete, но я все еще не уверен как создать таблицу 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'))
);

1 Ответ

1 голос
/ 29 апреля 2020

Это похоже на отношение 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 на studentId (или наоборот):

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
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...