С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
1

Какая должна быть связь?

27.02.2020, 10:36. Показов 1237. Ответов 26

Author24 — интернет-сервис помощи студентам
Есть две модели, модель станций
Какая должна быть связь?



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



Вопрос какая между ними должна быть связь? Один ко многим, или многие ко многим?
(Маршрут включает в себя информацию:
начальная станция и время отправления;
конечная станция и время прибытия;
список промежуточных станций, и время
прибытия/стоянки/отправления для каждой из них.)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2020, 10:36
Ответы с готовыми решениями:

Какой должна быть строка подключения к БД если она в другом проекте?
У меня в решении(обучаюсь) 3 проекта. Первый ASP.NET MVC просто сайт с контроллером и вьюшкой с...

Какая связь проекта с файлами в папке AppData\Local\Temp\Temporary ASP.NET Files
Разбираю примеры приложений asp.net mvc4 . И во время выполнения (уже в самом браузере) вылетает...

Какая должна быть структура проекта онлайн магазина?
У меня есть задание, написать онлайн магазин книг. Там можно регистрироватся, додавать книги и ...

Какая должна быть длина одной стороны шестиугольника, если расстояние между ними должно быть 2.5 метра.
Помогите, пожалуйста, разобраться! Какая должна быть длина одной стороны шестиугольника, если...

26
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,678
Записей в блоге: 1
27.02.2020, 22:27 2
Anvean, теоретически много-ко-многим: у каждого маршрута может быть много станций, как и каждая станция может быть во многих маршрутах.
Но тут проблема: сложно будет сохранить и определить порядок станций для каждого маршрута.
Решение: создать промежуточный объект RailrouteStation с полями Railroute, Station, Order и связать его при помощи 1-ко-многим с Railroute и Station

UPD: Еще бы уникальный индекс накинул на все поля, чтобы дублирования позиций не было
1
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 22:29  [ТС] 3
Cupko, Я думаю эта модель не есть правильной, можно ведь просто модель маршрута определить как один список станций, так вроде бы должно быть проще, но я пока думаю какие могут быть подводные камни. Как бы вы реализовали модель маршрутов?

Добавлено через 1 минуту
Cupko, уникальный индекс на поля, это как?:D
0
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,678
Записей в блоге: 1
27.02.2020, 22:31 4
Цитата Сообщение от Anvean Посмотреть сообщение
Я думаю эта модель не есть правильной, можно ведь просто модель маршрута определить как один список станций, так вроде бы должно быть проще, но я пока думаю какие могут быть подводные камни. Как бы вы реализовали модель маршрутов?
Я ж вам и говорю, проблема только в порядке станций. Вы не сможете гарантировать что первая/последняя/промежуточная станция будет в выборке там, где надо. Добавляйте поле Order и сортируйте по нему. Откажитесь от свойств First/Last/Intermediate и выбирайте их из коллекции после сортировки
0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 22:34  [ТС] 5
Cupko, из этой коллекции virtual Icollection<Station> Stations?
0
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,678
Записей в блоге: 1
27.02.2020, 22:36 6
Anvean, из ICollection<RailrouteStation>, где RailrouteStation состоит из свойств Railroute, Station, Order(int)
0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 22:38  [ТС] 7
Cupko, Ага,теперь дошло, это получается новая модель, верно?
0
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,678
Записей в блоге: 1
27.02.2020, 22:38 8
Anvean, да, промежуточная модель для связи
0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 22:42  [ТС] 9
Cupko, спасибо вам огромное, вы себе не представляете как меня выручаете.

Добавлено через 2 минуты
Cupko, только вот, если отказаться от свойств First/intermedia/last в модели Railroute, оставить в ней только поле для связи с моделью станций и конструктор?
0
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,678
Записей в блоге: 1
27.02.2020, 22:48 10
Anvean, не совсем понял вопроса. Убираете First/Last/Intermediate, оставляете RailrouteStations (ICollection<RailrouteStation>), тогда First у вас будет - RailrouteStations.OrderBy(x => x.Order).FirstOrDefault()?.Station, Last - RailrouteStations.OrderByDescending(x => x.Order).FirstOrDefault()?.Station, Intermediate - RailrouteStations.OrderBy(x => x.Order).Skip(1).Take(RailrouteStations.Length - 2)
0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 22:53  [ТС] 11
Cupko, как понять "оставляете" если RailrouteStantions это новая модель будет с полями(Railroutr/stantion/ordee), тем не менее модель Railroute тоже ведь останется но из нее мы убрали фактически все поля, что будет в ней?
0
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,678
Записей в блоге: 1
27.02.2020, 22:56 12
Anvean, ничего вы с модели Railroute не убираете, как и из Station (кроме связей между друг другом). Связи меняете на RailrouteStation и там и там. Всё.

Не по теме:

Вот если бы вы вместо скринов постили код, мне было бы проще объяснить, скопипастив некоторые фрагменты

0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 23:06  [ТС] 13
Cupko, Насчет скринов учту, подитожу если вы не против.
Делаю новую модель RailrouteStantion с полями остальных моделей и свойством для сортировки.
?При этом из модели Railroute не удаляю свойства Firststation/intermedia/last, но я от них отказываюсь¿
Связываю новую модель 1-ко-многим с Railroute и Station.
Дальше работаю с UnitOfWork с помощью модели RailrouteStantions.
Так-же нужно будет добавить контекст данных для RailrouteStantions.
Выделил то что не совсем понятно.
Все верно понял?
0
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,678
Записей в блоге: 1
27.02.2020, 23:10 14
Цитата Сообщение от Anvean Посмотреть сообщение
При этом из модели Railroute не удаляю свойства Firststation/intermedia/last, но я от них отказываюсь
Удаляете
Цитата Сообщение от Anvean Посмотреть сообщение
Дальше работаю с UnitOfWork с помощью модели RailrouteStantions.
Не надо с ней работать напрямую, нужно работать с Railroute или Station. Это просто модель для связи, никакой смысловой нагрузки она не несет.
Цитата Сообщение от Anvean Посмотреть сообщение
Так-же нужно будет добавить контекст данных для RailrouteStantions.
Нужно
0
3682 / 2593 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
27.02.2020, 23:13 15
Цитата Сообщение от Anvean Посмотреть сообщение
Как бы вы реализовали модель маршрутов?
Тут yurickas уже упоминал ,что станции могут быть узловыми, то есть входить в состав нескольких маршрутов.
Поскольку станция - это фактическое единственное общественное место, откуда отправляются и куда прибывают пассажиры, то я бы саму таблицу станций оформил как справочник с некоторой доп. информацией.
Далее маршрут - это последовательность точек маршрута, соответственно с начальной и конечной точкой маршрута.
Грубо модель бы вылядела так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// маршрут
public class Route {
     
      public int Id {get;set;}
      
      // типа кодовое имя для использования внутри самое системы, а не для пользователя - это уже моя фантазия :)
      // необязательное свойство
      public string Name {get; set}
 
      // наименование
      public string Title {get;set;}
      
 
      public virtual List<RoutePoint> RootPoints {get;set;} = new List<RoutePoint>();      
 
      // тоже храним в БД
      /// так называемое хранимое вычисляемое свойство
      //  Храним в базе, но при необходимости можно пересчитать
      public int RouteLength {get; set;}
 
      // 1)      
      // + сюда можно добавить 2 прямые ссылки
      // на начальную станцию или конечную
      // пока неизвестно, понадобится ли это или нет, поэтому не добавляем
 
 
      // 2) Возможно следует добавить метод пересчета маршрута      
      // пока тоже неизвестно нужно ли, поэтому не добавляем
      
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// точка маршрута
public class RoutePoint {
   
     public int Id { get; set; }     
     
     // порядковый номер точки маршрута - важное свойство
     public int  OrderNumber {get; set;}
 
     // длина (в метрах, км - как удобнее), я бы в метрах выражал для точности
     // для первой точки - 0
     // тип можете изменить, если хотите
     public double PreviousPointDistance { get;set; }
 
     //наименование станции
     public string Title { get; set;}
 
     // далее можно продублировать некоторые другие существенные свойства из объекта Station 
     // чтобы не делать доп. запросы в БД
     // ...
      
     // navigation properties
    
     // на маршрут 
     public virtual Route Route {get;set;}
      
     // FK
     public int IdRoute {get;set;}
 
     // на станцию
     public virtual Station Station {get;set;}
 
     // FK
     public int IdStation {get;set;}
}

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
// Станция - справочик. Фактичекое единственное общесвтенное место
public class Station
{
   public int Id {get;set;}
   public string Name {get;set;}
 
   // для БД
   // их может быть очень много, в зависимости от кол-ва маршрутов, поэтому virtual
   public virtual List<RootPoint> RootPoints {get;set;} = new List<RootPoint>();
 
   // другие некоторые важные свойства
   // например Location станции   
}
Итого у нас три связи между 3-мя сущности
1) Route to RoutePoint - one-to-many
2) Station to RoutePoint - one-to-many
3) RoutePoint to Station - one-to-one

Те свойства, которые можно добавить, а можно и не добавлять - это уже на свое усмотрение, у вас там как раз в ТЗ было указано, что это поощряется.
Далее просто осталось правильно сконфигурировать через EntityTypeConfiguration<T> и начальная модель готова.
0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 23:14  [ТС] 16
Cupko,поэтому немного запутался, может гдето не так понял
Какая должна быть связь?
, спасибо вам большое.
0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 23:26  [ТС] 17
IamRain, Ваш вариант выглядит несколько сложнее, даже не знаю чей вариант мне более подходит.
Спасибо вам за очень подробный ответ, лайки закончились к сожалению:D
0
3682 / 2593 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
27.02.2020, 23:34 18
Цитата Сообщение от Anvean Посмотреть сообщение
Ваш вариант выглядит несколько сложнее,
А вы ясно сформулируйте сколько у вас сущностей и сколько (и каких) связей между этими сущностями, тогда можно будет сравнить сложности этих моделей.

Цитата Сообщение от Anvean Посмотреть сообщение
лайки закончились к сожалению
Да ничего, зато картинок с кодом много, Instagram тинейджер

Добавлено через 4 минуты
Anvean, учитывая, что у вас возникали проблемы с конфигуроированием БД и с миграциями в соседнем посте, рекомендую прочесть эту книгу от Джулии Лерман - Code First.
0
Cupko
27.02.2020, 23:35
  #19

Не по теме:

Цитата Сообщение от Anvean Посмотреть сообщение
лайки закончились к сожалению
Они нынче по карточкам? :)

0
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 23:43  [ТС] 20
IamRain, теперь понял почему инстаграм тинейджер, скриншоты мне показались намного удобнее, но я уже понял что это не так))
В варианте Сирко, две сущности и одна промежуточная, выходит две связи один ко многим. Выходит его вариант легче?)

Добавлено через 3 минуты
IamRain, Спасибо за книгу, к сожалению у меня две недели на этот проэкт, ТЗ я думаю вы видели, в связи с этим вообще нет времени читать книги, а информации в интернете очень часто недостаточно, поэтому и приходится задавать глупые вопросы умным людям, если зафейлю проэкт и меня не возьмут на препрод, обязательно прочту эту книгу:)
0
27.02.2020, 23:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.02.2020, 23:43
Помогаю со студенческими работами здесь

Какая температура должна быть?
Привет форумчане, 2 дня назад столкнулся с такой проблемой. Стал сильно шуметь комп и крышка...

Какая база должна быть?
Здраствуйте. Есть проблема. В joomla я загленул севодня. И начал установлять. На одной из страниц...

какая должна быть температура?
подскажите пожалуйста рабочую температуру NVIDIA GeForce GT 210

какая скорость должна быть?
Объясните пожалуйста, у меня соединение DSL 400 кбит\с, а при скачиваний файлов из интернета....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru