0

내 데이터베이스에 virustotal.com 결과를 저장하려고합니다. 하지만 정상화에 문제가 있습니다. 파일이 40 개 안티 바이러스에 의해 감지되면 나는 이제 다음과 같은 일반적인 테이블정규화에 대한 제안

AntivirusName FileID DetectedID DetectedDate 
AVG    1   abc   --/--/-- 
Kaspersky   1   xyz   --/--/-- 
Norton   1   xxx   --/--/-- 

가 오전 가정, 다음 데이터베이스에 대한 40 개 항목이 있습니다. 어떻게 이런 반복을 제거 할 수 있습니까? 친절하게 안내해 드리겠습니다.

+0

그들은 반복 아니에요 - 그들이 올바른 정보입니다. 이 정보를 통해 AV가 파일을 선택하지 않았다는 것을 알 수 있습니다. 당신은'DISTINCT' 키워드를 살펴볼 수 있습니다. –

답변

2

하나 이상의 파일 (하나 이상의 파일에 하나 이상의 바이러스 서명 (DetectedID)이 있음)을 두 번 이상 검색 할 수 있다고 가정합니다 (DetectedDate). FileID)가 여러 제품 (AntivirusName)에 의해 감지되었습니다. 따라서 현재 구조에서는 모든 열에 값이 중복되어 행이 중복 될 수 있습니다. 즉, 고유 한 키를 제공하기 위해 id 열을 추가해야합니다. 그런 다음 AntivirusNameAntivirusNameIdAntivirusName 열로 된 FK 인 AntivirusNameId으로 대체 할 수 있습니다. FileIDDetectedID을 사용하여 동일한 작업을 수행해야하는지 궁금한 점이 있지만 분명히 아닙니다.

그래서, 당신의 테이블은 다음과 같습니다

create table av_name as (
    AntivirusNameId int, -- PK 
    AntivirusName VARCHAR(50) 
); 
create table av_scan as (
    id int,     -- PK 
    AntivirusNameId int, -- FK 
    FileId int, 
    DetectedID CHAR(3), 
    DetectedDate DATE 
); 
+0

여기 DetectedID는 기본적으로 바이러스 백신이 악성 파일을 식별하는 데 사용되는 이름입니다. trojan.123 – user3069453

+0

그러나'FileID'는'DetectedID'와 아무런 관련이 없습니다, 맞습니까? – Turophile

+0

예, 맞습니다. 바이러스 백신과 관련이 있습니다. – user3069453