|
|
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Я не могу никак увязать две сущности - действие и документ. На одном действии, например "Присвоение сотруднику квалификационной категории", может висеть как один документ "Приказ о присвоении", так и 2 документа: "Вышестоящий приказ о присвоении" и "Наш Приказ о присвоении". Я понимаю, что тут связь "один ко многим", 2 таблицы - "Действия" и "Документы", связанные "один ко многим". Но когда я так делаю, то запросы получаются совершенно безумные по объему и сложности, потому что действий полно, а один документ может висеть на разных действиях. Выглядит ужасно и работает через пень-колоду. Я решила было плюнуть и вообще не выносить документы в отдельную таблицу, а сделать для ИД документа 2 поля в основных таблицах. Например, в таблице "Действия" 2 поля "document_id". Но меня беспокоит, что это будет типа избыточность или как там ее. Я ненавижу избыточность и стараюсь строить базы строго из нужных полей, а тут получается, что одно поле "document_id" у меня почти всегда будет пустое (очень мало действий, на которых висело бы сразу 2 документа). Но зато запросы меньше и аккуратнее и работают чище. Посоветуйте что-нибудь, а то я запуталась. Что выбрать? Я хочу сделать по правилам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 16:21 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelЗдравствуйте. Я не могу никак увязать две сущности - действие и документ. На одном действии, например "Присвоение сотруднику квалификационной категории", может висеть как один документ "Приказ о присвоении", так и 2 документа: "Вышестоящий приказ о присвоении" и "Наш Приказ о присвоении". Я понимаю, что тут связь "один ко многим", 2 таблицы - "Действия" и "Документы", связанные "один ко многим". Но когда я так делаю, то запросы получаются совершенно безумные по объему и сложности, потому что действий полно, а один документ может висеть на разных действиях. Выглядит ужасно и работает через пень-колоду. Я решила было плюнуть и вообще не выносить документы в отдельную таблицу, а сделать для ИД документа 2 поля в основных таблицах. Например, в таблице "Действия" 2 поля "document_id". Но меня беспокоит, что это будет типа избыточность или как там ее. Я ненавижу избыточность и стараюсь строить базы строго из нужных полей, а тут получается, что одно поле "document_id" у меня почти всегда будет пустое (очень мало действий, на которых висело бы сразу 2 документа). Но зато запросы меньше и аккуратнее и работают чище. Посоветуйте что-нибудь, а то я запуталась. Что выбрать? Я хочу сделать по правилам. Если у Вас на одном действии может быть несколько документов, а один документ относиться к нескольким действиям - это, очевидно, отношение "многие ко многим". Достаточно странно, что добавление одной связующей таблицы превращает запросы в "безумные" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 16:46 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, спасибо за ответ. Понимаете, на самом деле получается гораздо больше таблиц в запросе! Вовсе не две! 1. Таблица "Действия". 2. Таблица "Ассоциированные документы", где действиям присвоены ид документов. 3. Таблица "Документы" с полями серии, номера, даты начала и окончания, выдавшей организации, подписавшего человека. 4. Таблица "Юрлица", связанная с таблицей "Документы" по ид_юрлица" - для получения в запросе наименования юрлица, выдавшего документ. 5. Таблица "Физлица", связанная с таблицей "Документы" по ид_физлица" - для получения в запросе наименования физлица, подписавшего документ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 16:54 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelКот Матроскин, спасибо за ответ. Понимаете, на самом деле получается гораздо больше таблиц в запросе! Вовсе не две! Это понятно, я имел в виду -становится на одну таблицу больше. В одном случае у Вас 4 таблицы, в другом 5 - такая ли большая разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 17:01 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurel может висеть как один документ "Приказ о присвоении", так и 2 документа: "Вышестоящий приказ о присвоении" и "Наш Приказ о присвоении".Если документов может быть только два и никогда три или больше (даже в военное время и по особому распоряжению) то ваш подход с двумя document_id вполне нормальный. Повесьте check на таблицу, чтобы исключить ситауации когда основной document_id пустой, а дополнительный нет. Добавление третьего document_id превращает check в очень громоздкий, а четвертый в полный кошмар. OkeTurel Я ненавижу избыточность и стараюсь строить базы строго из нужных полейЭто пройдет с годами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 17:38 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurel, ... Я хочу сделать по правилам. ...правила на то и существуют чтоб их нарушать....) избыточность - если не безумная может быть полезна .OkeTure..Я решила было плюнуть и вообще не выносить документы в отдельную таблицу, а сделать для ИД документа 2 поля в основных таблицах.... так можно и в уважаемый Ексель вернуться...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 18:02 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelКот Матроскин, спасибо за ответ. Понимаете, на самом деле получается гораздо больше таблиц в запросе! Вовсе не две! 1. Таблица "Действия". 2. Таблица "Ассоциированные документы", где действиям присвоены ид документов. 3. Таблица "Документы" с полями серии, номера, даты начала и окончания, выдавшей организации, подписавшего человека. 4. Таблица "Юрлица", связанная с таблицей "Документы" по ид_юрлица" - для получения в запросе наименования юрлица, выдавшего документ. 5. Таблица "Физлица", связанная с таблицей "Документы" по ид_физлица" - для получения в запросе наименования физлица, подписавшего документ. И что с этими таблицами не так? Вполне нормальная структура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 18:26 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelНа одном действии, например "Присвоение сотруднику квалификационной категории", может висеть как один документ "Приказ о присвоении", так и 2 документа: "Вышестоящий приказ о присвоении" и "Наш Приказ о присвоении" В этом месте у меня зарождается сомнение. Не буду выдавать всю цепочку размышлений, просто скажу результат: имхо, весь этот механизм в итоге приходит к примерно следующему дереву: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 18:41 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
softwarerOkeTurelНа одном действии, например "Присвоение сотруднику квалификационной категории", может висеть как один документ "Приказ о присвоении", так и 2 документа: "Вышестоящий приказ о присвоении" и "Наш Приказ о присвоении" В этом месте у меня зарождается сомнение. Не буду выдавать всю цепочку размышлений, просто скажу результат: имхо, весь этот механизм в итоге приходит к примерно следующему дереву: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Вот мне тоже кажется, что у действия есть основание и это один документ, а у последнего в свою очередь своё основание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2017, 19:50 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelЯ не могу никак увязать две сущности - действие и документ. OkeTurelПосоветуйте что-нибудь, а то я запуталась. Что выбрать? Я хочу сделать по правилам. К черту все правила... - всего и будет две таблицы (не учитывая прочей мишуры типа дат и подписей), только нужно поставить все с головы на ноги - документ первичен, действия по нему вторичны... - Все документы (и "Вышестоящие" и " Наши" в одной ГЛАВНОЙ таблице docs ) - Если документ "Вышестоящий" (выше уже не бывает), то значение owner (владелец) у него равно нулю (или null, кому как, но мне лучше ноль - ибо это конкретная величина) и соответственно, действий по нему В ПОДЧИНЕННОЙ таблице Actions может и не быть (а могут и быть). - Если документ " Наш", то значение owner у него содержит id_doc "Вышестоящего" документа из этой же таблицы Docs и соответственно в подчиненной таблице Actions есть вся движуха по этому документу... Преимущества: - Документов с owner = 0 "Вышестоящих" будет мало (по вашим же словам) и вы в запросах будете оперировать только с теми документами у которых owner > 0 с "Вашими" документами. - Не ограниченный уровень иерархии подчинения документов (например, сначала был приказ, потом директива со ссылкой на приказ, а потом уже внутренний приказ со ссылкой на директиву и естественно уже и действиями в Actions). - при желании "Вышестоящие" документы можно упаковывать и хранить как "Наши", например описывая в Actions их краткое содержание, суть и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 00:24 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
vmag- Не ограниченный уровень иерархии подчинения документов (например, сначала был приказ, потом директива со ссылкой на приказ, а потом уже внутренний приказ со ссылкой на директиву и естественно уже и действиями в Actions). Если такое будет, то в таблицу Docs добавить дополнительный признак наш/не наш дабы отделить мух от котлет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 00:38 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
в общем имхо окончательный вариант таки с признаком наш/не наш (my) на случай если иерархия документов больше двух или если вообще нет "вышестоящих" документов, а только "наш", тогда признаки в записях ставим по ситуации: 1. Вышестоящий документ верхнего уровня: owner = 0 my = False (не "наш") 2. Вышестоящий документ промежуточный или нижнего уровня: owner = id_doc вышестоящего my = False (не "наш") 3. Наш документ имеющий Вышестоящий документ: owner = id_doc вышестоящего my = True ("наш") 4. Наш документ не имеющий Вышестоящего документа (сам по себе): owner = 0 my = True ("наш") Естественно основная работа теперь будет по признаку my = True ("наш") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 01:04 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
vmag, Может быть ситуация, что с одним действием связаны несколько документов. А эти документы при этом не связаны между собой по типу главный / подчиненный. Например, есть приказ о присвоении категории, а есть к примеру медицинская справка об обследовании, которое должно выполняться при смене категории. То есть к одному действию надо присоединить два документа. Так что без дополнительной таблицы связи многие ко многим не обойтись. Да и связи между документами могут быть не такими однозначным. Например, есть приказ вышестоящей организации о присвоении категории тем, кто прошел тесты. И есть протокол проведения тестирования сотрудников. И у приказа о присвоении категории будет два вышестоящих документа - вышестоящий приказ и протокол тестирования. А это еще одна таблица связей. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 10:30 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
[quot Но когда я так делаю, то запросы получаются совершенно безумные по объему и сложности, потому что действий полно, а один документ может висеть на разных действиях. Выглядит ужасно и работает через пень-колоду. покажи пример безумных запросов. я полагаю, безумно сложные запросы ты даже никогда не видела. (очень мало действий, на которых висело бы сразу 2 документа). Но зато запросы меньше и аккуратнее и работают чище. не бывает "2". Либо один, либо больше одного - т. е . много. я думаю, тебе не надо паниковать, а надо делать как задумано по ТЗ, т. е. про первому варианту, одно действие - много документов. база данных не должна быть удобной для запросов, она должна быть адекватна по структуре своей задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 10:35 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelКот Матроскин, спасибо за ответ. Понимаете, на самом деле получается гораздо больше таблиц в запросе! Вовсе не две! 1. назови цифру, от которой ты бы считала, что в запросе много таблиц. потом я назову свою. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 10:37 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurel, вообще, покажи свою структуру уже... начальный или оба варианта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 10:39 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
MasterZivназови цифру, от которой ты бы считала, что в запросе много таблиц. потом я назову свою. Точно, давайте меряться количеством таблиц! Код: sql 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 11:19 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
s_ustinovvmag, Может быть ситуация, что с одним действием связаны несколько документов. А эти документы при этом не связаны между собой по типу главный / подчиненный. Например, есть приказ о присвоении категории, а есть к примеру медицинская справка об обследовании, ИМХО вы собрали в кучу не собираемое (приказ о присвоении очередного воинского звания со справкой в бассейн)... в Docs руководящие документы, а если нудны подтверждающие документы (иногда), то проще завести дополнительную таблицу для этого и повесить её уже на таблицу Actions как подчиненную... Но даже в той прошлой моей последней схеме ваша проблема решается на ура добавлением еще одного признака в таблицу Docs - статус документа (например 1 это руководящий, 2 - сопутствующий) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 11:45 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelЯ не могу никак увязать две сущности - действие и документ. На одном действии, например "Присвоение сотруднику квалификационной категории", может висеть как один документ "Приказ о присвоении", так и 2 документа: "Вышестоящий приказ о присвоении" и "Наш Приказ о присвоении". я бы сочла, что это типа ежедневника или контроля исполнения документов номерном для ссылки на вышестояший автордатаназваниеисполнительдата исполнение статус10директор10/01/2017наградить женщин к 8 мартапрофком20/02/2017110директор02/03/2017выдать женщинам по хххх руббухгалтерия06/03/201720директор11/01/2017наградить участников вовсовет ветеранов10/02/2017вып120директор22/02/2017выдать ветеранам по хххх руббухгалтерия23/02/201731профком12/01/2017запрос в отдел кадров на работающих женщин старше 30 летотдел кадров14/01/2017вып41профком14/01/2017роздать цехам спискисеменова15/01/2017вып51профком18/01/2017получить спискисеменова20/01/201762совет ветеранов19/01/2017запрос в отдел кадров на работающих ветерановотдел кадров20/01/2017вып72совет ветеранов20/01/2017составить и выверить списки пенсионеров-ветерановильина22/01/2017вып82совет ветеранов25/01/2017оформить ответ в дирекциюильина26/01/2017вып ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 13:35 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. :^) Сейчас прочту все посты и все уясню, а пока только уяснила, что требуется показать мою структуру. Вот моя структура, пожалуйста. [img] http://savepic.net/8882997.jpg [/img] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 15:48 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurelЗдравствуйте. :^) Сейчас прочту все посты и все уясню, а пока только уяснила, что требуется показать мою структуру. Вот моя структура, пожалуйста. [img] http://savepic.net/8882997.jpg [/img] Для начала требуется вашу структуру немного упорядочить, чтобы связи через весь экран не проходили... Вы сами вашу структуру в таком виде понимаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:14 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
Добавлю, что у меня кадровая база, т.к. я кадровик, а специализированных кадровых систем типа 1-С или Паруса у нас нет. Приходится пыхтеть самой. :) Уважаемые ответившие, у меня в таблице "Документы" ЕСТЬ 2 поля document_id и document1_id, и второе поле как раз для наддокумента. Я им пользовалась для допсоглашений к трудовым договорам: трудовой договор - наддокумент для допсоглашения, другими словами - допсоглашение подчинено трудовому договору. Но в случае с приказами я не пользовалась этим, а теперь поняла, что да, вышестоящий областной приказ - наддокумент для нашего внутреннего приказа. Когда я вставила эту связь, то запрос заработал более-менее сносно. Хотя я согласна с s_ustinov, могут быть и два несвязанных между собой документа, висящие на одном действии. Тогда запрос выдает на одного сотрудника 2 строки. А это нельзя, потому что из запроса все экспортируется программно в Эксель в бланк приказа. Но с другой стороны, действительно можно добавить дополнительные свойства документам, типа "руководящий", "сопутствующий", как советует vmag. И в запросе отсеять только нашей организации документы. А с третьей стороны, можно предельно "раздробить" действия, сделать их очень мелкими, и тогда, наверно, будет одно действие - один документ, как и пишет skyANA. SERG1257, я сейчас попробовала без этого, но если будет продолжаться с моей базой такая петрушка, то придётся. Устала разбираться в собственных запросах. :) MasterZiv, у меня в одном запросе 9 таблиц, из этих таблиц 6 штук - на самом деле не таблицы, а другие запросы, которые сами состоят из таблиц числом от четырех до семи. Можно ли это считать нормальным? аля1ц, я не хочу в Эксель, мне он не нравится. ) vmag, я долго ломала голову, что первично, мне кажется, что первично действие, возможно я ошибаюсь. Не знаю, в таблице "Документы" можно сделать ссылку на что угодно - на код звания, на код отпуска, на код физлица для личных документов типа паспортов. И как-то в формах сначала показываются эти действия, а при нажатии на плюсик развертываются документы, мне кажется, это значит, что документы вторичны? Ну, не знаю. ПЕНСИОНЕРКА, да, похоже на мою таблицу "документы". Большое спасибо, что ответили мне. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:40 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
s_ustinov, как это упорядочить структуру, там структура нелинейная, не типа "ступенька - другая ступенька", а все перемешано. Все равно будут косые линии. Если приглядеться, то понимаю. ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:42 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
OkeTurels_ustinov, как это упорядочить структуру, там структура нелинейная, не типа "ступенька - другая ступенька", а все перемешано. Все равно будут косые линии. Если приглядеться, то понимаю. ) Речь не о косых линиях. При проектировании БД стараются таблицы располагать группами. И чтобы большая часть связей была внутри групп, а между группами было 1-2 связи, а не паутина. У вас вроде так не получается, так как много "петель". Скорее всего, надо повысить уровень нормализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:47 |
|
||
|
Проектирование без избыточности
|
|||
|---|---|---|---|
|
#18+
softwarer, это все так красиво выглядит, как Вы начертили, а на деле не знаю даже, на каждой таблице куча других - кто подписал документ, какая организация издала, если трудовой договор - то на какой основании действует подписавший. Возможно, надо избавиться от некоторой информации, хотя и жалко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 16:51 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=39395685&tid=1540198]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 180ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...