Как отобразить связанные данные в текущей таблице? - PullRequest
0 голосов
/ 22 марта 2019

Есть три таблицы:

CREATE TABLE T1_HUMAN (
    Id int IDENTITY PRIMARY KEY,
    [Name] varchar(max) NOT NULL,
    Surname varchar(max) NOT NULL,
    TypePhone <???>, 
    PhoneNumber <???> 
)

CREATE TABLE T2_PHONE (
    Id int IDENTITY PRIMARY KEY,
    TypePhone varchar(max) NOT NULL, 
    PhoneNumber char(12) NOT NULL UNIQUE, 
    [Name] <???>,
    Surname <???>
)

CREATE TABLE T3 (
     T1_PhoneNumber int NOT NULL FOREIGN KEY REFERENCES T1_HUMAN(Id),
     T2_PhoneNumber int NOT NULL FOREIGN KEY REFERENCES T2_PHONE(Id),
     PRIMARY KEY(T1_PhoneNumber, T2_PhoneNumber) 
)

Как вы видите, это отношение «многие ко многим»: один человек может иметь более одного телефона, а один номер телефона может использовать несколько человек.

Мне нужно следующее:

  • Если конкретный номер телефона (T2_PHONE.Id) используется несколькими людьми, эти данные (имя, фамилия) должны отображаться в соответствующем поля таблицы T2_PHONE.

  • Если конкретный человек (T1_HUMAN.Id) использует несколько телефонных номеров, это данные (TypePhone, PhoneNumber) должны отображаться в соответствующие поля таблицы T1_HUMAN.

Как изменить таблицы в соответствии с вышеуказанными требованиями?

1 Ответ

1 голос
/ 22 марта 2019

Структура таблиц в порядке, как она есть.

То, что вы запрашиваете, странно и не совсем понятно.Например, если один человек использует 2 телефона, у вас будет 2 пары (typephone, phonenumber): вы не можете поместить их в один ряд.

Я подозреваю, что вам нужны либо значения, разделенные запятыми, или несколько полей.Если это так, пожалуйста, НЕ измените текущую правильную структуру ваших таблиц и нарушите первую нормальную форму.Вместо этого, если вы должны видеть эти данные, создайте представления, которые зависят от этих таблиц.

Мы будем рады предоставить ответ, если вы уточните, что именно вы хотите.Например, как вы хотите, чтобы ваши запросы выглядели в случае, когда лица А и Б совместно используют телефон1 и телефон2?

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