powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ведение базы данных учета командировок и больничных листов.
21 сообщений из 21, страница 1 из 1
Ведение базы данных учета командировок и больничных листов.
    #39967759
Shelleex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
«Ведение базы данных учета командировок и больничных листов» Во время трудоустройства сотрудники предприятия заполняют личную карточку, где хранятся такие данные: фамилия, имя, отчество, год рождения, дата зачисления на работу, должность, оклад, подразделение, идентификационный код и т.д. Каждый человек имеет свой табельный номер. На предприятии несколько подразделений. Если сотрудник болел, он должен подать больничный лист (Л / л) до табельного службы. В Л / л указанные ФИО человека, дата начала больничного, дата конца больничного. Если сотрудник был в командировке, то командировки тоже оформляется через табельное службу, где указывается начало и конец командировки.

Ежемесячно система может формировать отчеты по таким данным: - справочник подразделений и их работников; - количество людей, которые имели командировки по каждому подразделению; - количество людей, которые болели и имеют больничные листы в текущем месяце, продолжительность больничного; - общий список людей, которые не имеют больничные листы (по алфавиту). -
  • создать таблицу работников возраст которых более 60 лет

  • Само задание звучит так.

    Пока что я сделал

    Код: plsql
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    CREATE TABLE Worker
    (
         ТабельныйНомер INT PRIMARY KEY IDENTITY,
         Имя NVARCHAR (20) NOT NULL,
         Фамилия NVARCHAR (20) NOT NULL,
         Отчество NVARCHAR (20) NOT NULL,
         ГодРождения INT NOT NULL CHECK (ГодРождения> 1900 AND ГодРождения <2002),
         Дата Date NOT NULL,
         Должность NVARCHAR (20) NOT NULL,
         Оклад INT CHECK (оклад> = 0),
         Подразделение NVARCHAR (20) NOT NULL
    )
    
    CREATE TABLE SickLeave (
         НормеЛикарняногоЛиста INT PRIMARY KEY IDENTITY,
         Имя NVARCHAR (20) NOT NULL,
         Фамилия NVARCHAR (20) NOT NULL,
         Отчество NVARCHAR (20) NOT NULL,
         ДатаНачала Date NOT NULL,
         ДатаОкончания Date NOT NULL CHECK (ДатаОкончания >= ДатаНачала), 
    )
    



    Но почему-то в SickLeave ругается на дату окончания, как сделать проверку чтоб дата начала не была позднее даты начала?

    И помогите сделать:
    • справочник подразделений и их работников;
    • количество людей, которые имели командировки по каждому подразделению;
    • количество людей, которые болели и имеют больничные листы в текущем месяце, продолжительность больничного;
    • общий список людей, которые не имеют больничные листы (по алфавиту).
    • создать таблицу работников возраст которых более 60 лет
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967766
    Фотография crutchmaster
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    ТабельныйНомер
    Это - ересь. В коде только ascii.
    ГодРождения> 1900 AND ГодРождения <2002
    Уже через год будет неактуально. И не год рождения, а дата.
    Дата Date
    Это что такое?
    Оклад INT
    Бывают совместители на нескольких должностях. Связь один человек - одна должность может не выполняться. Уточни у препода этот момент.
    Отчество NVARCHAR (20)
    20 - очень мало.
    Подразделение NVARCHAR (20) NOT NULL
    Тут должен быть ключ на таблицу с подразделениями.
    Должность NVARCHAR (20) NOT NULL
    Тут тоже.
    CREATE TABLE SickLeave (
    ...
    Имя NVARCHAR (20) NOT NULL,
    Фамилия NVARCHAR (20) NOT NULL,
    Отчество NVARCHAR (20) NOT NULL,
    ...

    Зачем тут опять ФИО? Тебя спросят про нормальные формы, не ответить и завалишь защиту.

    Shelleex
    Пока что я сделал

    10 число, а ты только сел делать диплом.
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967767
    Фотография crutchmaster
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex
    И помогите сделать:

    Любой каприз за ваши деньги.
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967769
    Ролг Хупин
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    В SickLeave надо бы использовать ссылку на Worker, где список всех юзеров, а не барабанить по-новому ФИО и т.д.
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967776
    Фотография a_voronin
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex
    • справочник подразделений и их работников;
    • количество людей, которые имели командировки по каждому подразделению;
    • количество людей, которые болели и имеют больничные листы в текущем месяце, продолжительность больничного;
    • общий список людей, которые не имеют больничные листы (по алфавиту).
    • создать таблицу работников возраст которых более 60 лет

    По прочтении без труда сделаете сами

    https://sql-language.ru/knigi-po-sql/sql-zaprosy-dlya-prostyx-smertnyx.html
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967779
    Shelleex
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    Ролг Хупин, а как сделать ссылку?
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967791
    Фотография alexeyvg
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex
    Ролг Хупин, а как сделать ссылку?

    В SickLeave добавить поле ТабельныйНомер INT, сделать его Foreign Key на Worker

    И удалить поля Имя, Фамилия, Отчество
    Shelleex
    Код: plsql
    1.
    2.
    3.
    4.
    5.
    6.
    CREATE TABLE SickLeave (
         НормеЛикарняногоЛиста INT PRIMARY KEY IDENTITY,
         ТабельныйНомер INT NOT NULL REFERENCES Worker(ТабельныйНомер),
         ДатаНачала Date NOT NULL,
         ДатаОкончания Date NOT NULL CHECK (ДатаОкончания >= ДатаНачала), 
    )
    

    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967808
    Shelleex
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    alexeyvg,

    SickLeave
    Оно так и должно? И как обнулить счётчик, Номера просто уже началось не с 1 а с 2.
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967845
    Ролг Хупин
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex
    alexeyvg,

    SickLeave
    Оно так и должно? И как обнулить счётчик, Номера просто уже началось не с 1 а с 2.


    НормеЛікарняногоЛиста с 2? ну так ви ж identity использовали.
    Можно сбить на 1, можно identity не использовать, если номера важны.
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967864
    Владислав Колосов
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex,

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

    Неплохая методическая разработка, например, здесь: https://rep.bntu.by/bitstream/handle/data/4940/Bazy_dannyh.pdf?sequence=1&isAllowed=y
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967869
    Shelleex
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    Я хочу что бы из таблицы Position бралось в Worker должность, оклад, подразделение.

    Создал я 3 таблицы и то вероятно не правильно.

    Код: 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.
    CREATE TABLE Worker
    (
            ТабельныйНомер INT PRIMARY KEY IDENTITY, 
            Имя NVARCHAR(20) NOT NULL,
            Фамилия NVARCHAR(20) NOT NULL,
    	Отчетсво NVARCHAR(20) NOT NULL,
    	ГодРождения INT NOT NULL CHECK(ГодРождения >= 1900 AND ГодРождения <= 2002),
    	ДатаПринятия Date NOT NULL,
    	Должность NVARCHAR(20) NOT NULL REFERENCES Position(Должность),
    	Оклад INT NOT NULL REFERENCES Position(Оклад),
            Подразделение NVARCHAR(20) NOT NULL REFERENCES Position(Подразделение) 
    );
    
    CREATE TABLE SickLeave
    (
            НомерБольничногоЛиста INT PRIMARY KEY IDENTITY, 
    	ТабельныйНомер INT NOT NULL REFERENCES Worker(ТабельныйНомер),
    	ДатаНачала Date NOT NULL,
    	ДатаОкончания Date NOT NULL,
    	constraint CK_ДатаОкончания CHECK (ДатаОкончания >= ДатаНачала)
    );
    
    CREATE TABLE Position
    (
            Должность NVARCHAR(20) PRIMARY KEY, 
    	Оклад INT CHECK(Оклад >= 0) NOT NULL,
    	Подразделение NVARCHAR(20) NOT NULL
    );
    
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967894
    Фотография alexeyvg
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex
    alexeyvg,

    SickLeave
    Оно так и должно?
    Да.

    Shelleex
    И как обнулить счётчик, Номера просто уже началось не с 1 а с 2.
    DBCC CHECKIDENT
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967895
    Фотография alexeyvg
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex
    Создал я 3 таблицы и то вероятно не правильно.
    Ага.

    В Worker не надо Оклад и Подразделение, они же есть в таблице Position
    Нужно просто ссылку на Position, то есть поле Должность
    Код: sql
    1.
    Должность NVARCHAR(20) NOT NULL REFERENCES Position(Должность)
    
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967925
    Shelleex
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    • справочник подразделений и их работников;
    • количество людей, которые имели командировки по каждому подразделению;
    • количество людей, которые болели и имеют больничные листы в текущем месяце, продолжительность больничного;
    • общий список людей, которые не имеют больничные листы (по алфавиту).
    • создать таблицу работников возраст которых более 60 лет
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39967955
    Фотография Критик
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Человек может уволится, а потом устроится туда же с тем же табельником.
    Человек может работать на часть ставки в нескольких подразделениях, в одном на 0.1, в другом на 0.5, а в третьем на 0.4
    Год рождения никому не интересен, интересна дата.
    Почему "оклад" имеет тип Int?
    Почему в Position у вас ключ текстовой, могут в двух подразделениях быть позиции "аналитик" с кардинально разной зп?

    Да и вообще все не правильно, ибо человек может мигрировать по должностям хоть каждый месяц, у вас это хоть как-то учтено? Позиции могут сегодня быть, а завтра их не будет и т.д. По уму вам нужно взять модель данных из какого-нибудь SAP HR или 1c в соответствующих профильных форумах.
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39968048
    Shelleex
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Гость
    SELECT Count(ei.ТабельныйНомер) КоличествоЛюдей, Sum(DAY(ei.ДатаОкончания) - DAY(ei.ДатаНачла)) КоличествоДней FROM Worker e
    JOIN SickLeave ei
    ON e.ТабельныйНомер = ei.ТабельныйНомер
    JOIN Position ea
    ON e.Должность = ea.Должность
    Where MONTH(GETDATE()) = MONTH(ei.ДатаОкончания) OR MONTH(GETDATE()) = MONTH(ei.ДатаНачла)

    • количество людей, которые болели и имеют больничные листы в текущем месяце, продолжительность больничного;
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39968070
    Фотография alexeyvg
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Shelleex
    Как сделать суму всех, у меня получается берет суму только первого в таблице SickLeave
    У вас не берёт первого, всё нормально.
    Только сумму дней вы криво считаете.

    Человек болел с 31 января по 2 февраля ,сколько дней получится?
    DAY(2 февраля) - DAY(31 января) = 2 - 31 = -29 дней.
    Человек болел минус 29 дней, это что, Карл?

    Воспользуйтесь функцией DATEDIFF
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39968077
    ИВП
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    Критик
    Человек может уволится, а потом устроится туда же с тем же табельником.
    Человек может работать на часть ставки в нескольких подразделениях, в одном на 0.1, в другом на 0.5, а в третьем на 0.4
    Год рождения никому не интересен, интересна дата.
    Почему "оклад" имеет тип Int?
    Почему в Position у вас ключ текстовой, могут в двух подразделениях быть позиции "аналитик" с кардинально разной зп?

    Да и вообще все не правильно, ибо человек может мигрировать по должностям хоть каждый месяц, у вас это хоть как-то учтено? Позиции могут сегодня быть, а завтра их не будет и т.д. По уму вам нужно взять модель данных из какого-нибудь SAP HR или 1c в соответствующих профильных форумах.

    Ребят! Учебное задание!!!
    "Уволиться и устроиться с тем же табельником" - фантастика! Сколько раз в год? Учебное задание!!!
    "Почему "оклад" имеет тип Int?" - Копейки даже в Пятерочке отбрасывают/округляют. Это Учебное задание!!!
    "Работа в разных подразделениях на долю ставки" - зачем в учебном задании?
    "Год рождения не интересен" - кто сказал? Учебное задание!!!
    "Миграция по должностям, удаление позиций..."
    вы требуете от УЧЕБНОГО задания учет всех маловероятных случаев!!!
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39968089
    Фотография Критик
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    ИВП,

    Почему нет? Учебные задачи нужно делать качественно, основывая их на реальности, а не используя выхолощенные до предела примеры. Тем более, что hr-модель довольно простая.
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39968099
    Фотография crutchmaster
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    ИВП
    "Работа в разных подразделениях на долю ставки" - зачем в учебном задании?

    Чтобы поиздеваться над студентом?
    ...
    Рейтинг: 0 / 0
    Ведение базы данных учета командировок и больничных листов.
        #39968117
    L_argo
    Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
    Участник
    По уму вам нужно взять модель данных из какого-нибудь SAP HR или 1c в соответствующих профильных форумах. Чиво ? Там душевнобольные напроектировали сотню таблиц, в которых совсем не просто разобраться. И там 90% ненужного по сабжу.

    Мы делали так: Есть справочник сотрудников. Есть справочник вакансий с повторами должностей, если их нужно много (н-р грузчики, водители). Специальный документ принимает/увольняет сотрудников на ID конкретной вакансии с конкретной ЗП. Т.е. вакансия может быть занята, вакантна, неактуальна. И можно всегда узнать где и когда с какой ЗП работал сотрудник.
    Потом документ Табелирование подневно заполняет раб. дни отработанными часами сотрудников (или больничными, отпусками и отлулами) со ссылкой на ID вакансии + доп. инфа. Раз в мес. на это уходит пару минут в полуручном режиме.

    Всегда можно четко сказать на любую дату, какое штатное расписание, открытые вакансии и какой ФОТ.
    ЗП рассчитывается элементарно.
    Можно числиться хоть на 10 должностях в разных конторах холдинга.
    Можно делать очень сложную формулу расчета заработков/больничных/переработок и т.п.
    Можно четко вести учет ФОТ-затрат на конкретные работы, н-р строительство объекта: табелировать почасово на конкретные проекты.
    Любой сотрудник может получить подробный список, из чего состоит его ЗП за конкретный период.
    В любой момент можно перетабелировать, если была ошибка.

    Штрафы и премии были в отдельном документе.

    Всего десяток таблиц покрывал и кадры и расчет ЗП. Проект жив с 2003г.
    ...
    Рейтинг: 0 / 0
    21 сообщений из 21, страница 1 из 1
    Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ведение базы данных учета командировок и больничных листов.
    Целевая тема:
    Создать новую тему:
    Автор:
    Закрыть
    Цитировать
    Найденые пользователи ...
    Разблокировать пользователей ...
    Читали форум (0):
    Пользователи онлайн (0):
    x
    x
    Закрыть


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