Как удалить дублирующиеся записи в ASP.Net Таблица представления индекса MVC

#c# #sql-server #razor #asp.net-mvc-5

#c# #sql-сервер #razor #asp.net-mvc-5

Вопрос:

У меня следующий сценарий:

У меня есть Contact со свойствами FirstName и LastName . Контакт может иметь несколько PhoneNumbers и столько EmailAddresses , сколько нужно. Я определил их как 3 объекта с общими отношениями. Пожалуйста, ознакомьтесь с определениями таблиц ниже:

 create table Contact
(
    ID int primary key not null identity(1,1),
    FirstName nvarchar(40),
    LastName nvarchar(40)
);
go

create table ContactNumber
(
    ID int primary key not null identity(1,1),
    PhoneNumber nvarchar(40)
);
go

create table EmailAddress
(
    ID int primary key not null identity(1,1),
    EmailAddress nvarchar(40)
);
go

create table UserContact
(
    ID int primary key not null identity(1,1),
    ContactID int foreign key references Contact(ID),
    ContactNumberID int foreign key references ContactNumber(ID),
    EmailID int foreign key references EmailAddress(ID)
);
go
  

Теперь мне нужно отобразить этих пользователей в веб-приложении по моему выбору. Я выбрал C # MVC с движком Razor для представления. Я пытаюсь смоделировать это представление в таблице. Для редактирования, удаления, создания нового контакта и просмотра сведений о контакте в таблице требуются ссылки на действия. Я хочу, чтобы результирующий набор отображался следующим образом:

 FirstName | LastName | ContactNumber | EmailAddress
-------------------------------------------------------
James     | Smith    | 082 111 5454  | james@domain1.com | edit | details | delete
                                     | james@domain2.com
                                     | james@domain3.com
--------------------------------------------------------
Luther    | Arnolds  | 082 111 5455  | luther@domain1.com | edit | details | delete
                     | 082 111 5456  |
--------------------------------------------------------
Sarah     | Jones    | 082 111 5510  |  sarah@domain.com  | edit | details | delete
---------------------------------------------------------
          |          |               |
  

Однако я просто не нахожу способ записи для перевода ContactNumberID и EmailID столбцов из UserContact в map из их соответствующих связующих таблиц. Проблема, с которой я сталкиваюсь прямо сейчас, заключается в том, что она дублирует записи в UserContact , таким образом, таблица содержит много избыточных данных. Например, запись для James Smith будет повторяться 3 раза. Как я могу добиться этого в ASP.Net MVC без какого-либо дублирования записей?

Комментарии:

1. Может ли один адрес электронной почты или номер телефона использоваться более чем 1 контактом? Я подозреваю, что нет. Я бы поместил ContactID в качестве внешнего ключа в таблицах EmailAddress и PhoneNumber и удалил таблицу UserContact. Здесь у вас не так много для многих. У вас есть два разных отношения «1 ко многим».

2. @SeanLange Хорошо, тогда как я буду сопоставлять отношения с Contact ? Потому что мне отказывают в добавлении составного первичного ключа, ссылающегося на ContactID на EmailAddress и ContactNumber таблицы.

Ответ №1:

Я бы сделал что-то вроде этого. Обратите внимание, что я немного изменил названия столбцов. Мне очень неприятно иметь столбец с именем ID. Это идентификатор контакта (или что-то еще), независимо от того, в какой таблице он находится. Мне также очень не нравятся имена столбцов, изменяющиеся для одного и того же фрагмента данных в связанных таблицах.

 create table Contact
(
    ContactID int primary key not null identity(1,1),
    FirstName nvarchar(40) not null,
    LastName nvarchar(40) not null
);
go

create table ContactNumber
(
    ContactNumberID int primary key not null identity(1,1),
    PhoneNumber nvarchar(40) not null,
    ContactID int not null,
    constraint FK_ContactNumber_Contact_ContactID Foreign Key (ContactID) references Contact(ContactID)
);
go

create table EmailAddress
(
    EmailAddressID int primary key not null identity(1,1),
    EmailAddress nvarchar(40) not null,
    ContactID int not null,
    constraint FK_EmailAddress_Contact_ContactID Foreign Key (ContactID) references Contact(ContactID)
);
go