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

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

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

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



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



Вопрос какая между ними должна быть связь? Один ко многим, или многие ко многим?
(Маршрут включает в себя информацию:
начальная станция и время отправления;
конечная станция и время прибытия;
список промежуточных станций, и время
прибытия/стоянки/отправления для каждой из них.)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.02.2020, 10:36
Ответы с готовыми решениями:

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

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

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

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

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

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

Добавлено через 2 минуты
Cupko, только вот, если отказаться от свойств First/intermedia/last в модели Railroute, оставить в ней только поле для связи с моделью станций и конструктор?
0
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 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
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 22:53  [ТС] 11
Cupko, как понять "оставляете" если RailrouteStantions это новая модель будет с полями(Railroutr/stantion/ordee), тем не менее модель Railroute тоже ведь останется но из нее мы убрали фактически все поля, что будет в ней?
0
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1
27.02.2020, 22:56 12
Anvean, ничего вы с модели Railroute не убираете, как и из Station (кроме связей между друг другом). Связи меняете на RailrouteStation и там и там. Всё.

Не по теме:

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

0
 Аватар для Anvean
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
 Аватар для Cupko
654 / 591 / 171
Регистрация: 17.07.2012
Сообщений: 1,680
Записей в блоге: 1
27.02.2020, 23:10 14
Цитата Сообщение от Anvean Посмотреть сообщение
При этом из модели Railroute не удаляю свойства Firststation/intermedia/last, но я от них отказываюсь
Удаляете
Цитата Сообщение от Anvean Посмотреть сообщение
Дальше работаю с UnitOfWork с помощью модели RailrouteStantions.
Не надо с ней работать напрямую, нужно работать с Railroute или Station. Это просто модель для связи, никакой смысловой нагрузки она не несет.
Цитата Сообщение от Anvean Посмотреть сообщение
Так-же нужно будет добавить контекст данных для RailrouteStantions.
Нужно
0
 Аватар для IamRain
4602 / 2624 / 721
Регистрация: 02.08.2011
Сообщений: 7,035
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
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 23:14  [ТС] 16
Cupko,поэтому немного запутался, может гдето не так понял
Какая должна быть связь?
, спасибо вам большое.
0
 Аватар для Anvean
63 / 55 / 10
Регистрация: 12.02.2019
Сообщений: 303
27.02.2020, 23:26  [ТС] 17
IamRain, Ваш вариант выглядит несколько сложнее, даже не знаю чей вариант мне более подходит.
Спасибо вам за очень подробный ответ, лайки закончились к сожалению:D
0
 Аватар для IamRain
4602 / 2624 / 721
Регистрация: 02.08.2011
Сообщений: 7,035
27.02.2020, 23:34 18
Цитата Сообщение от Anvean Посмотреть сообщение
Ваш вариант выглядит несколько сложнее,
А вы ясно сформулируйте сколько у вас сущностей и сколько (и каких) связей между этими сущностями, тогда можно будет сравнить сложности этих моделей.

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

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

Не по теме:

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

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

Добавлено через 3 минуты
IamRain, Спасибо за книгу, к сожалению у меня две недели на этот проэкт, ТЗ я думаю вы видели, в связи с этим вообще нет времени читать книги, а информации в интернете очень часто недостаточно, поэтому и приходится задавать глупые вопросы умным людям, если зафейлю проэкт и меня не возьмут на препрод, обязательно прочту эту книгу:)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2020, 23:43
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Вопросы на собеседовании по Android
mobDevWorks 14.03.2025
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов. . . .
Лучшие игровые движки для Python
py-thonny 14.03.2025
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное. . .
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
run.dev 14.03.2025
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку. . .
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
NullReferenced 14.03.2025
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются. . .
smart-agent proper interface settings (2025)
jigi33 14.03.2025
Smart-agent proper interface settings (mart 2025). (see screenshots to look at "Etalon" ARM)
Продвинутые настройки JVM
Javaican 14.03.2025
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую. . .
CI/CD для приложений Java с Azure DevOps и Docker
Mr. Docker 14.03.2025
Разработка современных Java-приложений немыслима без системы непрерывной интеграции и доставки (CI/ CD). Azure DevOps в сочетании с Docker предоставляет мощный инструментарий для создания таких. . .
Разработка на PHP и интернет вещей (IoT)
Jason-Webb 14.03.2025
Интернет вещей (IoT) произвел настоящую революцию в способах взаимодействия устройств с окружающим миром. В эпоху, когда холодильники сами заказывают молоко, а термостаты учатся вашим привычкам,. . .
Node.js 20: Новые возможности и улучшения производительно­сти
Reangularity 14.03.2025
Что же принёс нам релиз Node. js 20? В первую очередь, это существенные улучшения в производительности. Движок V8 получил серьёзные оптимизации, благодаря чему JavaScript-код выполняется заметно. . .
Безопасность кластеров Apache Kafka
Javaican 14.03.2025
Apache Kafka стал одним из ключевых компонентов современных архитектур, обрабатывающих потоки данных в режиме реального времени. Его используют тысячи компаний от стартапов до технологических. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер