Могу ли я сохранить заказ на товары в соединительной таблице? - PullRequest
0 голосов
/ 18 февраля 2019

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

В настоящее время у меня есть две плоские таблицы, которые выглядят следующим образом.

Таблица циклов

+----+-------+ 
| id | loops |
+----+-------+
|  1 | Red   |
|  2 | Green |
|  3 | Blue  |
+----+-------+

Таблица остановок (не отсортирована)

+---------------------+-------+--------------+----+
|        stops        | loops | displayOrder | id |
+---------------------+-------+--------------+----+
| West Stop           | Red   |            1 | 12 |
| North Stop          | Red   |            2 | 43 |
| Building Stop       | Red   |            3 | 15 |
| Park Stop           | Red   |            4 | 14 |
| Park Stop           | Green |            1 | 42 |
| West Stop           | Green |            3 | 11 |
| Building Stop       | Green |            2 |  8 |
| Building Stop       | Blue  |            1 |  2 |
| Park Stop           | Blue  |            3 |  4 |
| West Stop           | Blue  |            2 |  6 |
+---------------------+-------+--------------+----+

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

+----------+-------+--------------+----+
|  stops   | loops | displayOrder | id |
+----------+-------+--------------+----+
| WestStop | Red   |            1 | 12 |
| WestStop | Green |            3 | 11 |
| WestStop | Blue  |            2 | 6  |
+----------+-------+--------------+----+

Можно ли использовать соединительную таблицу и объединение таблиц, чтобы получить только остановок для определенной петли при сохранении своего заказа?

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

Я также знаю, что, вероятно, я должен использовать циклы в таблице Stops в качестве внешнего ключа для петли в таблице Loops

Ответы [ 4 ]

0 голосов
/ 18 февраля 2019

Вы можете сделать это без соединительной таблицы, как показано ниже:

Declare @Loop Table
(Loop_Id int,
Name varchar(50))

Insert into @Loop
Values
(1,'Red'),
(2,'Green'),
(3,'Blue')

Declare @Stop_Table Table
(Stops varchar(500),
Loops varchar(50),
DisplayOrder int,
Id int)

Insert into @Stop_Table
(Stops,Loops,DisplayOrder,Id)
Values
('West Stop'        ,'Red'              ,'1','12'),
 ('North Stop'       ,'Red'              ,'2','43'),
 ('Building Stop'    ,'Red'              ,'3','15'),
 ('Park Stop'        ,'Red'              ,'4','14'),
 ('Park Stop'        ,'Green'            ,'1','42'),
 ('West Stop'        ,'Green'            ,'3','11'),
 ('Building Stop'    ,'Green'            ,'2','8'),
 ('Building Stop'    ,'Blue'             ,'1','2'),
 ('Park Stop'        ,'Blue'             ,'3','4'),
 ('West Stop'        ,'Blue'             ,'2','6')

 --To get all loops sort
 select S.*,L.* from @Stop_Table S
 Join @Loop L
 On L.Name = S.Loops
 Order by L.Loop_Id,S.DisplayOrder asc

--To get stops for a specific loop.For Ex:Red
 select S.*,L.* from @Stop_Table S
 Join @Loop L
 On L.Name = S.Loops
 where L.Name = 'Red'
 Order by L.Loop_Id,S.DisplayOrder asc
0 голосов
/ 18 февраля 2019

Порядок данных в таблице не гарантируется, если не указано иное.

Вам необходимо либо

  • Добавить столбец заказа
  • Сортировать по циклу, отображению заказа или идентификатору
  • Создать таблицу соединений и добавить порядокстолбец к вашей соединительной таблице.

Так, например,

Loop_ID Stop_ID Order
1         12      1
1         43      2
1         15      3
1         14      4
0 голосов
/ 18 февраля 2019

Между шинами (петлями) и автобусными остановками существует много-много взаимосвязей: стандартным способом является использование соединительной таблицы.

В соединительной таблице указано loops_stops, вы хотите сохранитьfk до автобусных линий, другой fk до автобусных остановок и последовательность остановки линии.Вы можете иметь уникальный ключ для двух столбцов ограничения (включая последовательность, возможно, что одна и та же остановка обслуживается дважды одной и той же строкой).Примечание: в MySQL вы обычно хотите использовать целочисленные первичные ключи с автоинкрементами.

В таблице остановок хранится информация, общая для остановок, такая как имя, местоположение, оборудование и так далее.

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

0 голосов
/ 18 февраля 2019

Создайте 3 таблицы.

Loop, Stop и одна таблица, чтобы присоединиться к ним. МАРШРУТ.

enter image description here

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

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