powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Если можете помогите написать код
33 сообщений из 33, показаны все 2 страниц
Если можете помогите написать код
    #38675524
Germ529
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разработать структуру БД , согласно приведенной диаграмме: прикреплен рисунок 1.

Описание сущностей:
Подразделения – представляет собой иерархическую структуру с неограниченным уровнем вложенности.
Сотрудники - сведения о физических лицах.
Должности – справочник должностей.
Штатные единицы – связующая таблица сотрудников подразделений и должностей.
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675529
Germ529
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Подразделения – представляет собой иерархическую структуру с неограниченным уровнем вложенности." - как понять? такое еще не делал

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675652
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Germ529"Подразделения – представляет собой иерархическую структуру с неограниченным уровнем вложенности." - как понять? такое еще не делал

Так на вашей схеме это уже Вами (?) отрисовано.
У каждой записи в соответствующей таблице есть ID и ссылка на родительскую запись, что в итоге порождает дерево с неограниченным ветвлением (в вашей терминологии структура с неограниченным уровнем вложенности).

Т.е. будут записи вида

IDParentID 102131425464

Что порождает дерево с главным узлом "1", двумя узлами "второго уровня" "2"/"3", узлом третьего уровня "4" с родителем "2" и двумя узлами четвертого уровня "5"/"6" и родителем 4. И количество уровней ничем не ограничены.
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675670
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблице Сотрудники должна быть ссылка на Должность, а не наоборот. Таблица Сотрудники должна хранить историю перемещения Сотрудника с должности на должность или между подразделениями. Обычно в ней есть еще поля ДатаС ДатаПо.
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675682
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П-ЛВ таблице Сотрудники должна быть ссылка на Должность, а не наоборот.
Философский вопрос. Если сотрудник может совмещать несколько должностей...
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675723
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинП-ЛВ таблице Сотрудники должна быть ссылка на Должность, а не наоборот.
Философский вопрос. Если сотрудник может совмещать несколько должностей...

Судя по связи 1-1 между штаткой и сотрудником - совмещение не предусмотрено.
Не понятна задача ТС - на "диаграмме" приведена требуемая структура в первом приближении (без учета ряда существенных фактов типа дат, хранения истории и т.п.).

Если задача ТСа написать скрипты для создания этих таблиц/либо "наваять" таблички в акцессе - то это не та ветка форума.
Если же задача ТСа как раз расширить сущности, предусмотрев возможные кейсы - то мягко сказать задача бесконечна...
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675777
Germ529
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sql может кто нибудь описать ? чтобы нагляднее было, в какой форме вообще примерно решать?
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675789
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Germ529,
не мешало бы указать СУБД - особенности могут быть свои.

для создания одной из таблиц, к примеру на Sybase ASE:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Create table employee
( Id integer identity,
  Name varchar(100),
  Patronymic varchar(100),
  Surname varchar(100),
  BirthDay datetime
)
with identity_gap = 100
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38675961
Germ529
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Microsoft SQL SERVER.

да, спасибо ребята за поддержку, добавил такой код.
Код который описан ниже, не совсем то что я хотел.
Как создать one to many relationship?

ALTER TABLE shtat ADD
--CONSTRAINT YourUniqueName --for adding your own name to unique constraint
UNIQUE(dolzhnost)

ALTER TABLE shtat
ADD
--constraint yourUniqueName --uncomment for adding your own name to FK constraint
FOREIGN KEY (dolzhnost) REFERENCES dolzhnost(id);
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676058
Germ529
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неужели никто не подскажет? (
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676069
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Germ529Microsoft SQL SERVER.

Да подключись Аксесом к базе (проект ADP) конструируй да рисуй что тебе нужно, есть куча и других инструментов - зачем всем мозг выносить... можно вообще макет отладить в том же акцесе от и до, а потом сделать экспорт в MS SQL.... а вообще схема изначально, мягко говоря - неудачный эскиз:
1. Обычно должности не сами по себе, а привязаны к подразделению (это штатка) в вашем случае если должность свободна, то хрен поймешь в каком подразделении вакансия...
2. + все те замечания что выше (даты С, По, приказ)

По поводу по последнего вопроса (one to many): Как может быть many между двумя первичными уникальными ключами ??? Many может быть только между первичным (уникальным) и вторичным (которых дохрена одинаковых - допускаются совпадения)... Учиться... Учиться... Учиться.... Шапками забросать не получится...
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676083
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Germ529,

Вот такой вариант (как точка опоры) более гибкий (готов выслушать критику...)
1. Просто Штатка - это отчет по Podrazdelenie и Doljnost.
2. Список сотрудников - это отчет по Podrazdelenie и Sotrudnik.
3. Один сотрудник может быть назначен хоть на 100 должностей (Совмещение).
4. Сотрудник одного подразделения может занимать должность другого подразделения (местная командировка).
5. Вакансии - это отчет по Podrazdelenie и Doljnost где у Doljnost нет подчинения в Shtat или нет в Shtat действующего приказа (data_s - data_po)
6. Сотрудники за штатом - это отчет по Podrazdelenie и Sotrudnik где у Sotrudnik нет подчинения в Shtat или нет в Shtat действующего приказа (data_s - data_po)
....
....
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676084
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

Вдогонку макет в Акцесе 2000
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676098
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,
схема в топике 1 мне понятна, а от 01:23 --нет
зачем вы подразделение во все таблицы затолкали

директор
--гл.инженер
----некие службы
--зам по экономике
----некие службы
--зам по производству
----под-зам по пр-1
-------цеха пр1
---------цех 1
-----------уч1
-----------уч2
-----------уч3
...........................
............................
----под-зам по пр-2
-------цеха пр2
............................
----под-зам по пр-3
-------цеха пр3
...........................
.
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676099
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

и мне кажется, что работник может занимать несколько ячеек в штатном расписании(внутреннем или внешнем)
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676112
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

директор
--гл.инженер
--зам по производству

Это подразделение "Управление предприятием"

Моя схема это
vmagВот такой вариант (как точка опоры)

+ У ТС ни слова про службы...


ПЕНСИОНЕРКАи мне кажется, что работник может занимать несколько ячеек в штатном расписании(внутреннем или внешнем)

vmag3. Один сотрудник может быть назначен хоть на 100 должностей (Совмещение).
4. Сотрудник одного подразделения может занимать должность другого подразделения (местная командировка).

Несмотря на то, что это только точка опоры....
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676114
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКАзачем вы подразделение во все таблицы затолкали

Не во все, а в нужные:
- в должность, чтобы было понятно в каком подразделении эта должность.
- в сотрудники- соответственно тоже...

ЭТО ТОЛЬКО ТОЧКА ОПОРЫ !
- мало таблицы подразделений - расширяйтесь...

Mikle83Если же задача ТСа как раз расширить сущности, предусмотрев возможные кейсы - то мягко сказать задача бесконечна...
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676244
Germ529
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо всем, все сделал, но теперь не могу понять задачу, обьясните плиз:

"Создать триггер контролирующий отсутствие циклов в иерархии подразделений" - как понять эту задачу?
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676307
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Germ529спасибо всем, все сделал, но теперь не могу понять задачу, обьясните плиз:

"Создать триггер контролирующий отсутствие циклов в иерархии подразделений" - как понять эту задачу?

Ну а теперь дуй обратно на форум "Microsoft SQL Server"
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676339
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Germ529"Создать триггер контролирующий отсутствие циклов в иерархии подразделений" - как понять эту задачу?

Кстати о птичках.... у вас (при чем не важно по какому пути вы пошли: по своему или по моему) нет иерархии подразделений, у вас тупо есть одна таблица Подразделения и всё.... Если вы хотите иерархию и бешенных циклов в иерархии, с которыми вам нужно будет бороться, то добавьте в Таблицу Подразделения еще одно поле типа "Код_Иерархии" и тогда:

1/Управление/0 - ноль, значит никому не подчиняется...
2/Первый отдел/1 - один, значит подчиняется Управлению....
3/Второй Отдел/1 - один, значит тоже подчиняется Управлению....
4/Автотранспортная Служба/2 - два, значит подчиняется Первому отделу...

Бла... Бла... Бла.....
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676411
Germ529
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,

то есть нужно создать такой триггер который будет контролировать повтор значении, например в "Код_Иерархии" если цикл повторяется (значения) то нужно его контролировать верно?
тогда parent мне зачем? запутался
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676436
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Germ529то есть нужно создать такой триггер который будет контролировать повтор значении

Я же говорю... идите обратно с этим на на форум "Microsoft SQL Server"... иерархия у вас уже в кармане...
лично я в триггерах не бум-бум, а так как стараюсь придерживаться правила: "Дурак не тот, который чего-то не знает, а тот кто рассуждает о том, чего не знает", то помочь вам больше ни чем не могу...
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676496
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagПЕНСИОНЕРКАзачем вы подразделение во все таблицы затолкали

Не во все, а в нужные:
- в должность, чтобы было понятно в каком подразделении эта должность.
- в сотрудники- соответственно тоже...

Сотрудник занимает должности в подразделении 2 и подразделении 3 (вполне возможная по Вашей схеме ситуация) - что будет в ID_podr таблицы "сотрудник"?
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676707
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинчто будет в ID_podr таблицы "сотрудник"?

ID_podr основного подразделения по ветке Подразделение - Сотрудник
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676742
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

ID_podr таблицы "сотрудник"?----этого не должно быть

штатное
__ид_штат
__ид_подр
__ид_должн
__оклад
__ид_сотрудник

сотрудники
__ид_сотрудник
__фио
__дата_рождения
__образование
....
и никакого подразделения

хотя возможно наличие даты увольнения и последнего подразделения
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38676790
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,

- У вас начнется резкий прогресс, как только вы отойдете от подхода 1С к вычислению значения 2+2 =...
- И нужно как то понимать где речь идет о курсовой работе с тремя таблицами и реальной предметной области....
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38677157
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagКот МатроскинСотрудник занимает должности в подразделении 2 и подразделении 3 -что будет в ID_podr таблицы "сотрудник"?

ID_podr основного подразделения по ветке Подразделение - Сотрудник
WTF "основное подразделение" в случае, когда человек занимает должности в нескольких подразделениях?
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38677536
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинWTF "основное подразделение" в случае, когда человек занимает должности в нескольких подразделениях?

Это всегда...
- если должность только в одном подразделении, то это основное подразделение и оно же единственное

vmag2. Список сотрудников - это отчет по Podrazdelenie и Sotrudnik.

- В этом списке Сотрудник представлен в своем основном подразделении...
Уточняю - таблицы Shtat и Doljnost не участвуют в определении основного подразделения Сотрудника...

- Если сделать запрос по Sotrudnik - Shtat - Doljnost, то можно найти Сотрудников у которых id_podr не совпадает с id_podr в таблице Doljnost (это и есть не основные подразделения Сотрудника, в которых он что то совмещает)...
- Мало того,- если у двух разных сотрудников одинаковые другие id_podr в Doljnost (по цепочке Sotrudnik - Shtat - Doljnost), то это значит, что они могут оба совмещать одну и ту же другую должность в определенных пропорциях (например пилить чужую ставку пополам)
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38677544
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

Еще раз картинку чтоб не листать
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38677594
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagУточняю - таблицы Shtat и Doljnost не участвуют в определении основного подразделения Сотрудника...

Отойдите от запросов, посмотрите с точки зрения модели.
Вот у нас Иван Иванович возглавляет службу безопасности и является одновременно членом совета директоров, итого он занимает должности в "СБ" и "директорате". Что в записи Sotrudnik по нему будет в ID_Podr? И почему?
Как Вы планируете поддерживать смысловую целостность этого поля - т.е. что будет, если на этапе ввода таблицы Sotrudnik оператор внесет ему в ID_podr "Бухгалтерия" - эта ошибка не будет отловлена системой никогда?
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38677915
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинВот у нас Иван Иванович возглавляет службу безопасности и является одновременно членом совета директоров, итого он занимает должности в "СБ" и "директорате". Что в записи Sotrudnik по нему будет в ID_Podr? И почему?

С точки зрения модели - хоть один человек на свете да должен принять решение: какое из указанных подразделений для Ивана Ивановича будет основным - код этого подразделения и нужно поставить в ID_Podr у Sotrudnik


Кот МатроскинКак Вы планируете поддерживать смысловую целостность этого поля - т.е. что будет, если на этапе ввода таблицы Sotrudnik оператор внесет ему в ID_podr "Бухгалтерия" - эта ошибка не будет отловлена системой никогда?

Основа это связка Podrazdelenie - Sotrudnik и на ней базируется всё (в этом смысле):
- Списки сотрудников подразделения для начальников подразделений (Сразу вопрос у Главбуха:
почему у меня числится уборщица ?)
- Общий Список телефонов организации.
- Любой другой список на связке Podrazdelenie - Sotrudnik
.... системой не знаю (когда в 1С вносите уборщицу в бухгалтерию - она ведь не пищит и комп не выключает?) а вот глазами сразу при просмотре первого же кривого списка...

При желании можно в любом списке выдать рядом с основным подразделением все совмещения сотрудника или только совмещения сотрудника:
- Если мы идем по схеме от Сотрудника к Подразделению по часовой стрелке (один шаг) то это Основные подразделения...
- Если мы идем по схеме от Сотрудника к Подразделению против часовой стрелки (Сотрудник -> Штат -> Должность -> Подразделение) то получаем совмещения...

Я согласен, что гибкость этого фрагмента из 4-х таблиц (замкнутого круга) немного шокирует своими возможностями и по этому требует более полной и точной конкретизации функционала и ограничений в реализации интерфейса, но это (с моей точки зрения) интереснее и предпочтительнее, чем сидеть со связанными руками над ограниченной схемой базы данных...
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38678071
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagКот МатроскинВот у нас Иван Иванович возглавляет службу безопасности и является одновременно членом совета директоров, итого он занимает должности в "СБ" и "директорате". Что в записи Sotrudnik по нему будет в ID_Podr? И почему?

С точки зрения модели - хоть один человек на свете да должен принять решение: какое из указанных подразделений для Ивана Ивановича будет основным - код этого подразделения и нужно поставить в ID_Podr у Sotrudnik


Ну то есть вводится некая непонятная сущность "основное подразделение", никакого алгоритма ее заполнения не предлагается, отдается на откуп оператору Машеньке "решай как хочешь".

vmagКот МатроскинКак Вы планируете поддерживать смысловую целостность этого поля - т.е. что будет, если на этапе ввода таблицы Sotrudnik оператор внесет ему в ID_podr "Бухгалтерия" - эта ошибка не будет отловлена системой никогда?

Основа это связка Podrazdelenie - Sotrudnik и на ней базируется всё (в этом смысле):
- Списки сотрудников подразделения для начальников подразделений (Сразу вопрос у Главбуха:
почему у меня числится уборщица ?)

Список будет кривым, поскольку совместители в него сразу не попадают (Иван Иванович будет только в одном подразделении).
Бронируем отель для членов директората, забронировали 6 мест - приехало 8 директоров, потому что у двоих стояли другие "основные подразделения"(tm). Толково :)

vmag.... системой не знаю (когда в 1С вносите уборщицу в бухгалтерию - она ведь не пищит и комп не выключает?) а вот глазами сразу при просмотре первого же кривого списка...

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



vmagЯ согласен, что гибкость этого фрагмента из 4-х таблиц (замкнутого круга) немного шокирует своими возможностями и по этому требует более полной и точной конкретизации функционала и ограничений в реализации интерфейса, но это (с моей точки зрения) интереснее и предпочтительнее, чем сидеть со связанными руками над ограниченной схемой базы данных...
Максимальная "гибкость" - у экселя. Это не значит что эксель это идеал проектирования БД.
Что Вы выигрываете этой гибкостью? Какой запрос нельзя сделать без ID_podr в таблице сотрудников?
...
Рейтинг: 0 / 0
Если можете помогите написать код
    #38678185
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинНу то есть вводится некая непонятная сущность "основное подразделение", никакого алгоритма ее заполнения не предлагается, отдается на откуп оператору Машеньке "решай как хочешь".

Мы с вами в разных плоскостях... можно даже сказать в параллельных и не пересекающихся... вы в каком-то искусственном интеллекте... а я в простой БД из 4-х таблиц по курсовой работе...

Кот МатроскинСписок будет кривым, поскольку совместители в него сразу не попадают (Иван Иванович будет только в одном подразделении).

Возьмите на работу Машеньку по умнее, которая поставит галочку "Выдать список вместе с совместителями"

vmagПри желании можно в любом списке выдать рядом с основным подразделением все совмещения сотрудника или только совмещения сотрудника:
- Если мы идем по схеме от Сотрудника к Подразделению по часовой стрелке (один шаг) то это Основные подразделения...
- Если мы идем по схеме от Сотрудника к Подразделению против часовой стрелки (Сотрудник -> Штат -> Должность -> Подразделение) то получаем совмещения...


Кот МатроскинВыставление сотруднику "основного подразделения", в котором он не занимает должностей - это противоречие.

Вы в армии не служили... когда занимаешь реальную должность в другом отделе, а мозг тебе выносит начальник основного отдела, в котором ты даже не числишься... плюс это противоречие (с вашей точки зрения) легко решается в интерфейсе (даже не объясняю как - ибо это очевидно)

Кот МатроскинМаксимальная "гибкость" - у экселя. Это не значит что эксель это идеал проектирования БД.
Что Вы выигрываете этой гибкостью? Какой запрос нельзя сделать без ID_podr в таблице сотрудников?

На полемику нет времени и желания...
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Если можете помогите написать код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]