|
|
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
Добрый день. Выполняю работу под MS SQL Server 2000. Довольно объемная задача - разработка базы данных для некой фирмы "Россинка". Полное задание звучит так: Код: plaintext 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. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. построил диаграмму(в приложенном документе можно увидеть). ВОПРОСЫ, КОТОРЫЕ У МЕНЯ ЕСТЬ И Я ПРОШУ У ВАС ПОМОЩИ: 1) как видно из ТЗ, товар находится в соот - щей таре, но тара также имеет небольшую конкретику, например, указано, что в бутыле вмещается 19 литров. А например насос просто измеряется в штуках, поэтому если добавлять еще одно поле в таблицу "Продукция", то оно будет заполнено не у всех видов тары. Что делать? В принципе можно оставить как есть, т к закупка и продажа отталкивается от единиц(а не оттого, сколько подединиц имеет каждая единица) 2) чтобы например произвести продажу товара будет вызван параметрический запрос, который попросит ввести сотрудника, покупателя, название нужного товара и его количество? из этого запроса будут вызываться другие подзапросы, делающие проверку на присутствие товара на складе и пр.? 3) вот этого не совсем понимаю: При достижении каким-либо пунктом указанного порогового уровня необходимо формировать заявку на закупку данного вида товара у оптовых поставщиков (формируется автоматически базой данных, необходимо предусмотреть информацию о том, чей заказ привел к формированию заявки). Эти заявки подлежат реализации, о чем должна быть сделана соответствующая запись (запись в числе прочего, должна содержать информацию о том, кто произвел закупку). т е мы пытаемся сделать запрос на покупку товара и если его не хватает, то автоматически формируется заявка, а заявка это тоже параметрический запрос,который требует ввести имя сотрудника, который заказывает товар и поставщика, который поставляет этот товар или по - другому что то нужно? Для этого имеютя таблицы "Claims" - заявки и "Supplyiers" - поставщики, но как их привязать к БД я не знаю точно? И как только заявка создана, она например кидается в таблицу "Claims" и количество продуктов в таблице "Produce" увеличивается на запрошенное количество(но при этом нужно проверять, чтобы она не превысила допустимый предел maxLevel)?Как это лучше сделать? 4) Заработок сотрудников является коммерческой тайной (поэтому сотрудник не должен видеть информацию о продажах других сотрудников, но должен иметь возможность просматривать информацию о своих продажах, количестве товара на складе, а также заявки на оптовую закупку дефицитного товара), и складывается из оклада и 5% премии с продаж. т е нужно будет использовать представления или нужно по другому реализовывать? 5) Отчет компании должен содержать информацию о том, кто и на какую сумму продал за отчетный период, какой доход он при этом получил. отчет - построить запрос или нужно использовать специальные средства MS SQL Server 2000? ПОСМОТРИТЕ СТРУКТУРУ БД И ДАЙТЕ ПОЖАЛУЙСТА РЕКОМЕНДАЦИИ??? Вот полный скрипт БД: Код: plaintext 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. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2008, 17:34 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
Форум есть "Проектирование БД" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2008, 21:14 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
я то обрадовался что кто то ответил :( пускай туда(в нужную ветвь) перенесут. я знаю что на этом форуме очень высокий уровень у мемберов и думал, что быстро помогут, тем более задача не очень сложная имхо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2008, 21:26 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
Это что, курсовик ? для курсовика сложновато. Я вот не понимаю, чего вы не понимаете, все вопросы какие-то общие и обширные. я вот только про это могу что-то сказать: автор 4) Заработок сотрудников является коммерческой тайной (поэтому сотрудник не должен видеть информацию о продажах других сотрудников, но должен иметь возможность просматривать информацию о своих продажах, количестве товара на складе, а также заявки на оптовую закупку дефицитного товара), и складывается из оклада и 5% премии с продаж. т е нужно будет использовать представления или нужно по другому реализовывать? либо view, либо процедуры, либо запрос написать так, чтобы один не видел данные другого. Тут много вариантов есть, в зависимости от того, как вы это всё делать будете, с помощью каких технологий. Например, если это будет JSP, то там и просто запрос можно написать. А так --либо view, либо процедуры. Модератор: Тема перенесена из форума "Разработка информационных систем". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 00:29 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
MasterZiv, вот от кого кого, а от вас ответ не думал нормальный получить(впрочем как и всегда). Помнится как то задал вопрос на С++, вы меня конкрентно "опустили", сказав что пора завязывать с программированием(может вы и правы были, но я не завязал). MasterZivлибо запрос написать так, чтобы один не видел данные другого. можно попробнее, например как? вопрос 1 откинул, т к не влияет ни на что остальные вопросы остались в силе? если кажется, что БД не конкретизирована предложите ваш более конкретный вариант? спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 01:23 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
разрабтка_БД_MS_SQL_2000 MasterZivлибо запрос написать так, чтобы один не видел данные другого. можно попробнее, например как? Ну, видимо, добавить в запрос условие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 08:41 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
Попробую помочь, хотя слишком обширная тема. разрабтка_БД_MS_SQL_2000 3) вот этого не совсем понимаю: ... Да в целом-то понятно, у вас должен быть триггер на таблице .... и вот тут становиться менее понятно, где у вас "склад"? Проще говоря, где будет храниться кол-во товаров, имеющихся в наличии? Если я што то пропустил, то "вешаете" триггер, который отслеживает кол-во товара на складе и если его меньше порогового, то делается запись в таблицу [Claims]. Вот только выбор поставщика из нескольких - это, имхо, должен решать человек. Поэтому, возможно надо предусмотреть в Claims хранение IDшников сразу нескольких поставщиков, а пользователь решает какого выбрать. Тут еще надо подумать. разрабтка_БД_MS_SQL_20004) Заработок сотрудников является коммерческой тайной (поэтому сотрудник не должен видеть информацию о продажах других сотрудников, но должен иметь возможность просматривать информацию о своих продажах, количестве товара на складе, а также заявки на оптовую закупку дефицитного товара), и складывается из оклада и 5% премии с продаж. т е нужно будет использовать представления или нужно по другому реализовывать?Проблема решаема. Закрываете доступ к Orders (точнее не даете разрешений) обычным пользователям на просмотр таблицы Orders, только на вставку строк. Создаете ХП, которую наделяете соответствующими правами доступа (см. BOL на предмет синтаксиса CREATE PROC), в которой фильтруюте выходной набор в соответствии с бизнес-правилами. Не забывайте, начальник отдела должен видеть все, главбух может читать все из Orders. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 09:56 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
разрабтка_БД_MS_SQL_2000 пишет: > MasterZiv, вот от кого кого, а от вас ответ не думал нормальный > получить(впрочем как и всегда). Помнится как то задал вопрос на С++, вы > меня конкрентно "опустили", сказав что пора завязывать с > программированием(может вы и правы были, но я не завязал). Значит, упорный. Это хорошо, это в нашем деле очень нужно. > можно попробнее, например как? Ну, для этого надо в первую очередь построить систему регистрации пользователей, чтобы иметь сущность пользователя, сохранять документы в БД со ссылкой на пользователя и по нему фильтровать. В примитивном случае, если предположить, что каждый сотрудник работает в БД под собственным пользователем, будет что-то типа select * from Employies e -- employees должно быть кажется. where .... and e.user_name = user_name() Поле user_name надо естественно добавить в таблицу и заполнять. либо можно построить отдельно список пользователей, их связь с сотрудниками, можно сделать также и права в явном виде. Но это сложнее. user_name() - функция, возвращяющая текущего пользователя БД в MSSQL. Возможно, в современных версиях она называется как-то по другому, или существуют другие подобные функции. это надо прочитать в доках. > вопрос 1 откинул, т к не влияет ни на что > остальные вопросы остались в силе? если кажется, что БД не > конкретизирована предложите ваш более конкретный вариант? я не знаю. Может поконкретней вопросы ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 10:15 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
Можно и на вставку закрывать, делать через процедуры или через VIEW с триггером instead. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 10:17 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Да не надо ему RLC делать, это ж задача для курсовика/диплома. Достаточно и вьюхи для Orders с предикатом Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 10:28 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
автори вот тут становиться менее понятно, где у вас "склад"? "склад" нужн сразу спроектировать в таблицу продукции(Produce) и за это будет отвечать поле countCurrentProd, поэтому если пытаться продать товар(а это будет параметрический запрос с указанием количества товара), то можно будет проверить разницу countCurrentProd - количество_по_запросу и если разность будет не меньше допустимого(т е той константы, указанной в той же записи в поле minLevel), то можно продавать. Т е в Produce добавится еще одно поле, как вы указали "склад" - показывающее текущее количество каждого товара. Если количество товара запрашивается больше порогового, то необходимо записывать в таблицу Заявки(Claims) данные по закупке при этом вызывается параметрический запрос(или триггер, надеюсь триггер может иметь параметры) в котором нужно будет указать Фамилию(например или Имя, а может и то и другое) поставщика). авторв Claims хранение IDшников сразу нескольких поставщиков, а пользователь решает какого выбрать. Тут еще надо подумать. просто добавить в таблицу IDSupl и все. Каждый товар можно заказать только у одного поставщика в конкретный момент(т е если нужно 10 литро воды, то можно выбрать Иванов и все, в следующий раз можно будет выбрать Петрова например, но одновременно за раз у разных поставщиков покупать нельзя). Также не будет информации о наличии у поставщиков товара, будем считать что они имеют беграничное кол - во товаров и к каждому из них можно всегда обратиться по любому из товаров. Нормально так? Но как тогда поступать: сделал заявку у Иванова(эти данные "упали" в таблицу заявок), т е считать, что якобы он их выдал и они автоматически переместились на склад, т е продажу можно провести. Т е получается в этом случае продажа всегда возможна, поскольку все необхимое будет докупать мгновенно или что то по мудрее придумать нужно? авторНе забывайте, начальник отдела должен видеть все, главбух может читать все из Orders. я как понял, что никаких начальников и главбухов нет. Имеется только 3 сотрудника. Т е нужно реализовать так, чтобы они входили в БД каждый под своим паролем(+ придумать начальника, иначе невозможно будет проверить работоспособность всей базы за раз, я правильно понимаю). Если вошли под начальником, то имеем доступ ко всем данным, если под одним из сотрудников, то осуществляем горизонтальную и вертикальную фильтрацию? Т е всего возможно 4 разных сотрудника?(4 придуманный нами получается как бы)? Если есть свободное время ответьте на вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 22:22 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
еще по поводу формировния заявки: например нужно продать 40 бутылей воды(их всего 55 на текущий момент, но нижний порог 20(верхний пускай 200), т е не хватает минимум 5), мне нужно сразу формировать зявку(без формирования заказа) или сначала в любом случае заказ, а уже потом заявку(т е в таблице Clams будет поле, отвечающее за номер заказа, кстати сейчас так и сделал)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 22:32 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
разрабтка_БД_MS_SQL_2000автори вот тут становиться менее понятно, где у вас "склад"? "склад" нужн сразу спроектировать в таблицу продукции(Produce) и за это будет отвечать поле countCurrentProd, поэтому если пытаться продать товар(а это будет параметрический запрос с указанием количества товара), то можно будет проверить разницу countCurrentProd - количество_по_запросу и если разность будет не меньше допустимого(т е той константы, указанной в той же записи в поле minLevel), то можно продавать. Т е в Produce добавится еще одно поле, как вы указали "склад" - показывающее текущее количество каждого товара. Если количество товара запрашивается больше порогового, то необходимо записывать в таблицу Заявки(Claims) данные по закупке при этом вызывается параметрический запрос(или триггер, надеюсь триггер может иметь параметры) в котором нужно будет указать Фамилию(например или Имя, а может и то и другое) поставщика).Ну что же, можно склад организовать и таким способом. Но на будущее, обычно ведется учет каждой партии товара поступающего на склад. Не понял про какие "параметрические запросы" и "триггеры с параметрами" речь, но в любой СУБД в триггер поступает информация об измененных записях. В MSSQL вам подойдет триггер типа FOR UPDATE. И не забудьте наложить констрейнт на поле countCurrentProd с запретом отрицательных значений. Кстати, это поле я бы лично назвал по-привычке QTY. авторпросто добавить в таблицу IDSupl и все. Каждый товар можно заказать только у одного поставщика в конкретный момент(т е если нужно 10 литро воды, то можно выбрать Иванов и все, в следующий раз можно будет выбрать Петрова например, но одновременно за раз у разных поставщиков покупать нельзя). Также не будет информации о наличии у поставщиков товара, будем считать что они имеют беграничное кол - во товаров и к каждому из них можно всегда обратиться по любому из товаров. Нормально так? Не все так просто. Между товарами и поставщиками отношение один-ко-многим и встает вопрос выбора поставщика. Как сделать выбор, решать вам. Но в любом случае, такие вещи решаются пользователем. Поэтому однозначно - сначала заявка (автоматически, на триггере), заявка рассматривается и утверждается на стороне клиента (ручками), корректируется и объем поставки и делается запись в таблицу Orders. В таблицу Claims следует добавить поле IDProd, а OrderID сделал бы NULLABLE'ивым и заносить в нее данные только после оформления заявки как способ отделения от оформленных заявок от требующих рассмотрения. Это лучше делать в ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:02 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
разрабтка_БД_MS_SQL_2000мне нужно сразу формировать зявку(без формирования заказа) или сначала в любом случае заказ, а уже потом заявку(т е в таблице Clams будет поле, отвечающее за номер заказа, кстати сейчас так и сделал)? Возможно номер заказа вообще не надо хранить. Хранить надо: PK (суррогатный), дату внесения заявки, ID товара. При оформлении заказа на товар, соответствующую заявку надо удалить. Удобно в хранимой процедуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:10 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
авторзаявка рассматривается и утверждается на стороне клиента (ручками), корректируется и объем поставки и делается запись в таблицу Orders. дело в том, что интерфейса никого не предполагается! будет запущен только анализатор запросов и все. что касается разграничение прав доступа наверное буду использовать create user, sp_addlogin, sp_adduser. Роли / группы не потребуются скорее всего, поскольку мало пользователей(всего 4, а не 1000 - чи), это ведь логично? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:15 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
разрабтка_БД_MS_SQL_2000авторзаявка рассматривается и утверждается на стороне клиента (ручками), корректируется и объем поставки и делается запись в таблицу Orders. дело в том, что интерфейса никого не предполагается! будет запущен только анализатор запросов и все. что касается разграничение прав доступа наверное буду использовать create user, sp_addlogin, sp_adduser. Роли / группы не потребуются скорее всего, поскольку мало пользователей(всего 4, а не 1000 - чи), это ведь логично?Без интерфейса база мертва! Фигня какая-то получается ... С пользователями можно и так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:27 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
авторБез интерфейса база мертва! Фигня какая-то получается ... С пользователями можно и так. вот поэтому я и говорил о параметрических триггерах. про интерфейс интересовался, оказалось что не нужно(если потом потребуется доделаю, например на дельфи), а пока только работать через query analyzer. Думаю все равно можно будет сделать, даже без интерфейса? сейчас немного перепроектирую БД и еще раз покажу диаграмму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:31 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
разрабтка_БД_MS_SQL_2000что касается разграничение прав доступа наверное буду использовать create user, sp_addlogin, sp_adduser. Роли / группы не потребуются скорее всего, поскольку мало пользователей(всего 4, а не 1000 - чи), это ведь логично?что касается разграничение прав доступа: логины сотрудников следует хранить в таблице Employies. Для выборки из Orders использовать ХП, выполняемую от имени ... ну, например, админа. В ней проверить кто запустил ХП и в соответствии с логином отфильтровать заказы определенного сотрудника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:31 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
разрабтка_БД_MS_SQL_2000вот поэтому я и говорил о параметрических триггерах. про интерфейс интересовался, оказалось что не нужно(если потом потребуется доделаю, например на дельфи), а пока только работать через query analyzer. Это все можно сделать через вызовы ХП. В смысле имитировать действия пользователей и тот самый пользовательский интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:33 |
|
||
|
разрабтать БД под MS SQL Server 2000
|
|||
|---|---|---|---|
|
#18+
авторЭто все можно сделать через вызовы ХП. В смысле имитировать действия пользователей и тот самый пользовательский интерфейс. я думаю аналогично, т е получится запуск ХП, затем отработает какой нибудь триггер на обновление или вставку, в свою очередь вызыващий другую ХП, а она что нибудь еще и пр., т е будет логика зашита на Transact - SQL. спасибо Senya_L, что подсказываете, без вас, не справился бы. Вы заглядывайте иногда в эту тему когда у вас время будет свободное, так сказать ведите меня(подсказывайте при возможности). попробую еще выяснить, точно ли интерфейс не требуется к этой задаче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2008, 23:45 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35686666&tid=1543545]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
12ms |
get forum data: |
5ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 204ms |
| total: | 356ms |

| 0 / 0 |
