Это пример One To One? - PullRequest
       5

Это пример One To One?

0 голосов
/ 06 декабря 2018

Мой учитель сказал мне, что этот код ниже является примером отношения один к одному:

CREATE TABLE PERSON (ID INT AUTO_INCREMENT, NAME VARCHAR(20) UNIQUE NOT NULL,
CONSTRAINT PK_PERSON PRIMARY KEY (ID));

CREATE TABLE PHRASE (ID INT AUTO_INCREMENT, PHRASE VARCHAR(50) UNIQUE NOT NULL, ID_PERSON INT,
CONSTRAINT PK_PHRASE PRIMARY KEY (ID),
CONSTRAINT FK_PHRASE FOREIGN KEY (ID_PERSON) REFERENCES PERSON(ID));

Но таким образом я могу задать две фразы одному и тому же человеку, что заставляет меня думать, что правильныйответ ниже:

CREATE TABLE PERSON (ID INT AUTO_INCREMENT, NAME VARCHAR(20) UNIQUE NOT NULL,
CONSTRAINT PK_PERSON PRIMARY KEY (ID));

CREATE TABLE PHRASE (ID INT AUTO_INCREMENT, PHRASE VARCHAR(50) NOT NULL UNIQUE, ID_PERSON INT,
CONSTRAINT PK_PHRASE PRIMARY KEY (ID),
CONSTRAINT FK_PHRASE FOREIGN KEY (ID_PERSON) REFERENCES PERSON(ID),
CONSTRAINT FK_PHRASE2 UNIQUE (ID_PERSON));

Второй пример - отношение один к одному или первый?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Второй пример взаимоотношений один на один.Первый только гарантирует, что ссылочная целостность сохраняется.Это означает, что он будет гарантировать, что значение PERSON_ID должно существовать в таблице PERSON, а также позволит вам ввести несколько идентификаторов PERSON в таблицу.

Во втором примере есть ограничение внешнего ключа, а также уникальный ключ идентификатора PERSON, который утверждает, что идентификатор PERSON также должен быть уникальным в таблице PHRASE.

0 голосов
/ 06 декабря 2018

Вы правы с вашей оценкой.Второй вариант, в котором вы заставили ID_PERSON быть уникальным, это соотношение 1: 1.Хорошая работа.

Вы также правы в своей оценке, что первый метод допускает использование нескольких фраз одним человеком, что становится отношением 1: многие.

Альтернативная теория

create table person (id int primary key, name varchar(20) unique);

create table phrase (id int primary key, phrase varchar(20) unique);

create table person_phrase (person_id int primary key, phrase_id int);

Вышеуказанное также приведет к соотношению 1: 1 между человеком и фразой, но будет иметь отдельные таблицы для человека и отдельную таблицу для фразы.Вы объединяете человека и фразу, если у одного человека есть одна фраза.

Этот дизайн позволяет начинать с 1: 1 и расширять до многих: множество отношений, в которых у человека может быть много фраз и одна фразаможет быть использовано многими людьми.Вы можете расширить до многих: многие, сделав person_id + фразу_id первичным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...