Как я могу сделать калькулятор в SQL? - PullRequest
0 голосов
/ 05 июня 2018

Итак, у меня есть такое задание в школе, где я должен был сделать инструмент для DPO в фирме.Задание выглядит следующим образом: «Вам необходимо разработать приложение или онлайн-инструмент, в котором вы можете ввести статус многих деталей, которые изложены в правилах для компании. Предполагаемый пользователь инструмента - сотрудник по защите данных (DPO).) или сотрудник, ответственный за прогнозирование данных в целом. Инструмент должен иметь возможность обрабатывать входные данные от более чем одной компании и более одного аудита для отдельной компании. Инструмент должен иметь возможность рассчитывать уровень соответствия GDPR. "Что касается калькулятора, я подумал о решении, в котором DPO для данной компании может дать одному из 12 правил либо 1, либо 0, где 1 означает, что это правило соблюдается, а 0 - нет.Поэтому я хотел взять сумму, а затем разделить на 12, чтобы получить среднее число соответствия.Но как мне сделать это в SQL?На данный момент я уже составил таблицу команд, аудиторов и регулирования, которая выглядит следующим образом:

    CREATE TABLE IF NOT EXISTS`Companies` (
    `idCompanies` INT NOT NULL,
    `cvr_nr` INT NULL,
    `Dato` DATE NULL,
    PRIMARY KEY (`idCompanies`))
    ENGINE = InnoDB;

    CREATE TABLE IF NOT EXISTS `Auditors` (
      `idAuditors` INT NOT NULL,
      `Auditor_name` VARCHAR(45) NULL,
      PRIMARY KEY (`idAuditors`))
    ENGINE = InnoDB;

insert into auditors values (1, "Lars Larsen");
insert into auditors values (2, "Henrik Andersen");
insert into auditors values (3, "Jens Andersen");

drop table if exists regulations;
CREATE TABLE IF NOT EXISTS `Regulations` (
  `idRegulations` INT NOT NULL auto_increment,
  `Regulation_name` VARCHAR(100) NULL,
  `Regulation_details` VARCHAR(400) NULL,
  PRIMARY KEY (`idRegulations`))
ENGINE = InnoDB;

    insert into regulations values (null, "xx", "xxx");
    insert into regulations values (null, "xx", "xxx");

#The XX are just as examples.

CREATE TABLE IF NOT EXISTS `Companies_has_Regulations` (
  `Companies_idCompanies` INT NOT NULL,
  `Regulations_idRegulations` INT NOT NULL,
  PRIMARY KEY (`Companies_idCompanies`, `Regulations_idRegulations`),
  INDEX `fk_Companies_has_Regulations_Regulations1_idx` (`Regulations_idRegulations` ASC),
  INDEX `fk_Companies_has_Regulations_Companies1_idx` (`Companies_idCompanies` ASC),
  CONSTRAINT `fk_Companies_has_Regulations_Companies1`
    FOREIGN KEY (`Companies_idCompanies`)
    REFERENCES `Companies` (`idCompanies`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Companies_has_Regulations_Regulations1`
    FOREIGN KEY (`Regulations_idRegulations`)
    REFERENCES `Regulations` (`idRegulations`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

1 Ответ

0 голосов
/ 05 июня 2018

Выберите все строки из Regulations, LEFT JOIN Companies_has_Regulations ON идентификатора регулирования и отфильтруйте соответствующую компанию.Затем вы получили все правила и для каждой строки в Companies_has_Regulations существовали значения из Companies_has_Regulations в дополнительных столбцах.Для строки из Regulations, где в Companies_has_Regulations нет записи, эти столбцы имеют нулевые значения.Теперь вы можете использовать count() поверх идентификатора из Regulations, чтобы получить счетчик всех нормативов, и count() сверх Regulations_idRegulations, чтобы получить счетчик всех нормативов, которым компания соответствует (count(column) не считает строки, гдеcolumn IS NULL).Поместите это в подразделение, и вы получите показатель соответствия.

SELECT count(chr.Regulations_idRegulations)
       /
       count(r.idRegulations) level_of_compliance
       FROM Regulations r
            LEFT JOIN Companies_has_Regulations chr
                      ON chr.Regulations_idRegulations = r.idRegulations
       WHERE chr.Companies_idCompanies = <ID for the company in question>;

Замените <ID for the company in question> на соответствующий идентификатор компании.

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