"인문정보 데이터베이스 SQL"의 두 판 사이의 차이
soook
(→수업정리) |
|||
(같은 사용자의 중간 판 4개는 보이지 않습니다) | |||
3번째 줄: | 3번째 줄: | ||
* 엑셀에 정리했던 모든 정보를 링크 해낼 수 있는 방법 찾기 !! | * 엑셀에 정리했던 모든 정보를 링크 해낼 수 있는 방법 찾기 !! | ||
==수업정리== | ==수업정리== | ||
+ | {{clickable button|[[2019 SQL]]}} | ||
+ | {{clickable button|[[2020 SQL]]}} | ||
+ | |||
+ | ==Semantic Data Table 생성 Script== | ||
+ | <pre> | ||
+ | /* | ||
+ | ---------------------------------------------------------------------------------------------- | ||
+ | Semantic Data Table 생성 Script | ||
+ | ---------------------------------------------------------------------------------------------- | ||
+ | 1. 이 파일을 에디터로 옮기고, "$project$"로 표시된 부분을 project 이름으로 바꾸세요. | ||
+ | 에디터의 '찾기 바꾸기' 기능을 이용 | ||
+ | 2. 수정된 파일을 확장자 ".sql"인 파일로 저장하고, Sql Server Management Studio로 읽어들이세요. | ||
+ | 3. Query Editer 상에서 아래의 스트립트를 차례대로 실행하세요. | ||
+ | ---------------------------------------------------------------------------------------------- | ||
+ | */ | ||
+ | |||
+ | |||
+ | /* ************************************************************ | ||
+ | Step 1: 테이블 생성 | ||
+ | 한 번만 수행하면 됩니다. | ||
+ | ************************************************************ */ | ||
+ | |||
+ | --① _____Data ....... 시맨틱 데이터의 노드 | ||
+ | create table $project$Data ( | ||
+ | id nvarchar(40) not null, | ||
+ | class nvarchar(40) null, | ||
+ | groupName nvarchar(40) null, | ||
+ | partName nvarchar(40) null, | ||
+ | label nvarchar(80) null, | ||
+ | infoUrl nvarchar(256) null, | ||
+ | iconUrl nvarchar(256) null, | ||
+ | primary key(id) | ||
+ | ) | ||
+ | |||
+ | --② _____Links ...... 시맨틱 데이터의 링크 */ | ||
+ | create table $project$Links ( | ||
+ | source nvarchar(40) not null, | ||
+ | target nvarchar(40) not null, | ||
+ | relation nvarchar(40) not null, | ||
+ | attribute nvarchar(40) null, | ||
+ | primary key (source, target, relation ) | ||
+ | ) | ||
+ | |||
+ | --③ _____Schema ..... 각 노드의 계층적 분류 | ||
+ | create table $project$Schema ( | ||
+ | id nvarchar(40) not null, | ||
+ | class nvarchar(40) null, | ||
+ | groupName nvarchar(40) null, | ||
+ | partName nvarchar(40) null, | ||
+ | label nvarchar(80) null, | ||
+ | infoUrl nvarchar(256) null, | ||
+ | iconUrl nvarchar(256) null, | ||
+ | primary key(id) | ||
+ | ) | ||
+ | |||
+ | --④ _____Category ... 계층 분류와 노드 사이의 관계 | ||
+ | create table $project$Category ( | ||
+ | source nvarchar(40) not null, | ||
+ | target nvarchar(40) not null, | ||
+ | relation nvarchar(40) not null, | ||
+ | attribute nvarchar(40) null, | ||
+ | primary key (source, target, relation ) | ||
+ | ) | ||
+ | |||
+ | --⑤ _____Nodes ... 노드 데이터와 분류 데이터 병합 | ||
+ | create view $project$Nodes | ||
+ | as | ||
+ | select * from $project$Data | ||
+ | union | ||
+ | select * from $project$Schema | ||
+ | |||
+ | |||
+ | /* ************************************************************ | ||
+ | Step 2: 업로드한 엑셀 데이터를 테이블에 삽입 | ||
+ | 데이터를 새로 업로드 할 때마다 수행합니다. | ||
+ | ************************************************************ */ | ||
+ | |||
+ | -- Excel File 업로드: 'SQL Server 가져오기 및 내보내기 마법사' 사용 | ||
+ | |||
+ | /* | ||
+ | 반복해서 업로드 할 경우 기존 데이터 파일을 삭제해야 합니다. | ||
+ | 그렇게 하지 않으면 중복 입력이 됩니다. | ||
+ | drop table $project$Data$ | ||
+ | drop table $project$Links$ | ||
+ | */ | ||
+ | |||
+ | --① Node List 데이터 삽입 | ||
+ | |||
+ | /* | ||
+ | 노드 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. | ||
+ | delete $project$Data | ||
+ | */ | ||
+ | |||
+ | insert into $project$Data (id, class, groupName, partName, label, infoUrl, iconUrl ) | ||
+ | select id, class, groupName, partName, label, infoUrl, iconUrl | ||
+ | from $project$Data$ | ||
+ | |||
+ | --② Link List 데이터 삽입 | ||
+ | |||
+ | /* | ||
+ | 링크 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. | ||
+ | delete $project$Links | ||
+ | */ | ||
+ | |||
+ | insert into $project$Links (source, target, relation) | ||
+ | select source, target, relation from $project$Links$ | ||
+ | |||
+ | |||
+ | /* ************************************************************ | ||
+ | Step 3: 계층적 메뉴 데이터 생성 | ||
+ | 데이터가 바뀔 때마다 반복해서 수행합니다. | ||
+ | ※ 계층적 메뉴를 사용할 때만 필요한 루틴입니다. | ||
+ | ************************************************************ */ | ||
+ | |||
+ | --① 스키마 데이터 생성 | ||
+ | |||
+ | /* | ||
+ | 스키마 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. | ||
+ | delete $project$Schema | ||
+ | */ | ||
+ | |||
+ | insert into $project$Schema (id, class, groupName, label) | ||
+ | values ('Thing', 'Category', 'Top', 'Thing' ) | ||
+ | |||
+ | insert into $project$Schema (id, class, groupName, label, infoUrl) | ||
+ | select class as id, 'Category' as class, 'Thing' groupName, class as label, 'class:'+class as infoUrl | ||
+ | from $project$Data | ||
+ | group by class | ||
+ | |||
+ | insert into $project$Schema (id, class, groupName, label, infoUrl) | ||
+ | select groupName as id, 'Category' as class, class as groupName, groupName as label, 'groupName:'+groupName as infoUrl | ||
+ | from $project$Data | ||
+ | where groupName is not NULL | ||
+ | group by class, groupName | ||
+ | |||
+ | insert into $project$Schema (id, class, groupName, label, infoUrl) | ||
+ | select partName as id, 'Category' as class, groupName, partName as label, 'partName:'+partName as infoUrl | ||
+ | from $project$Data | ||
+ | where partName is not NULL | ||
+ | group by groupName, partName | ||
+ | |||
+ | --② 카테고리 데이터 생성 | ||
+ | |||
+ | /* | ||
+ | 카테고리 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. | ||
+ | delete $project$Category | ||
+ | */ | ||
+ | |||
+ | --hasCategory (top->1st) | ||
+ | insert into $project$Category (source, target, relation ) | ||
+ | select 'Thing' as source, class as target, 'hasCategory' as 'relation' from $project$Data | ||
+ | group by class | ||
+ | |||
+ | -- hasCategory (1st->2nd) | ||
+ | insert into $project$Category (source, target, relation ) | ||
+ | select class as source, groupName as target, 'hasCategory' as 'relation' from $project$Data | ||
+ | where groupName is not NULL | ||
+ | group by class, groupName | ||
+ | |||
+ | -- hasCategory (2nd->3rd) | ||
+ | insert into $project$Category (source, target, relation ) | ||
+ | select groupName as source, partName as target, 'hasCategory' as 'relation' from $project$Data | ||
+ | where partName is not NULL | ||
+ | group by class, groupName, partName | ||
+ | |||
+ | -- hasMember (Major Category) | ||
+ | insert into $project$Category (source, target, relation ) | ||
+ | select class as source, id as target, 'hasMember' as 'relation' from $project$Data | ||
+ | where groupName is NULL | ||
+ | order by class, id | ||
+ | |||
+ | -- hasMember (2nd Category) | ||
+ | insert into $project$Category (source, target, relation ) | ||
+ | select groupName as source, id as target, 'hasMember' as 'relation' from $project$Data | ||
+ | where groupName is not NULL and partName is NULL | ||
+ | order by groupName, id | ||
+ | |||
+ | -- hasMember (3rd Category) | ||
+ | insert into $project$Category (source, target, relation ) | ||
+ | select partName as source, id as target, 'hasMember' as 'relation' from $project$Data | ||
+ | where partName is not NULL | ||
+ | order by partName, id | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | [[분류:튜토리얼]] |
2020년 8월 30일 (일) 01:33 기준 최신판
- 다시 정리할것 !
- 엑셀에 정리했던 모든 정보를 링크 해낼 수 있는 방법 찾기 !!
수업정리
Semantic Data Table 생성 Script
/* ---------------------------------------------------------------------------------------------- Semantic Data Table 생성 Script ---------------------------------------------------------------------------------------------- 1. 이 파일을 에디터로 옮기고, "$project$"로 표시된 부분을 project 이름으로 바꾸세요. 에디터의 '찾기 바꾸기' 기능을 이용 2. 수정된 파일을 확장자 ".sql"인 파일로 저장하고, Sql Server Management Studio로 읽어들이세요. 3. Query Editer 상에서 아래의 스트립트를 차례대로 실행하세요. ---------------------------------------------------------------------------------------------- */ /* ************************************************************ Step 1: 테이블 생성 한 번만 수행하면 됩니다. ************************************************************ */ --① _____Data ....... 시맨틱 데이터의 노드 create table $project$Data ( id nvarchar(40) not null, class nvarchar(40) null, groupName nvarchar(40) null, partName nvarchar(40) null, label nvarchar(80) null, infoUrl nvarchar(256) null, iconUrl nvarchar(256) null, primary key(id) ) --② _____Links ...... 시맨틱 데이터의 링크 */ create table $project$Links ( source nvarchar(40) not null, target nvarchar(40) not null, relation nvarchar(40) not null, attribute nvarchar(40) null, primary key (source, target, relation ) ) --③ _____Schema ..... 각 노드의 계층적 분류 create table $project$Schema ( id nvarchar(40) not null, class nvarchar(40) null, groupName nvarchar(40) null, partName nvarchar(40) null, label nvarchar(80) null, infoUrl nvarchar(256) null, iconUrl nvarchar(256) null, primary key(id) ) --④ _____Category ... 계층 분류와 노드 사이의 관계 create table $project$Category ( source nvarchar(40) not null, target nvarchar(40) not null, relation nvarchar(40) not null, attribute nvarchar(40) null, primary key (source, target, relation ) ) --⑤ _____Nodes ... 노드 데이터와 분류 데이터 병합 create view $project$Nodes as select * from $project$Data union select * from $project$Schema /* ************************************************************ Step 2: 업로드한 엑셀 데이터를 테이블에 삽입 데이터를 새로 업로드 할 때마다 수행합니다. ************************************************************ */ -- Excel File 업로드: 'SQL Server 가져오기 및 내보내기 마법사' 사용 /* 반복해서 업로드 할 경우 기존 데이터 파일을 삭제해야 합니다. 그렇게 하지 않으면 중복 입력이 됩니다. drop table $project$Data$ drop table $project$Links$ */ --① Node List 데이터 삽입 /* 노드 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. delete $project$Data */ insert into $project$Data (id, class, groupName, partName, label, infoUrl, iconUrl ) select id, class, groupName, partName, label, infoUrl, iconUrl from $project$Data$ --② Link List 데이터 삽입 /* 링크 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. delete $project$Links */ insert into $project$Links (source, target, relation) select source, target, relation from $project$Links$ /* ************************************************************ Step 3: 계층적 메뉴 데이터 생성 데이터가 바뀔 때마다 반복해서 수행합니다. ※ 계층적 메뉴를 사용할 때만 필요한 루틴입니다. ************************************************************ */ --① 스키마 데이터 생성 /* 스키마 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. delete $project$Schema */ insert into $project$Schema (id, class, groupName, label) values ('Thing', 'Category', 'Top', 'Thing' ) insert into $project$Schema (id, class, groupName, label, infoUrl) select class as id, 'Category' as class, 'Thing' groupName, class as label, 'class:'+class as infoUrl from $project$Data group by class insert into $project$Schema (id, class, groupName, label, infoUrl) select groupName as id, 'Category' as class, class as groupName, groupName as label, 'groupName:'+groupName as infoUrl from $project$Data where groupName is not NULL group by class, groupName insert into $project$Schema (id, class, groupName, label, infoUrl) select partName as id, 'Category' as class, groupName, partName as label, 'partName:'+partName as infoUrl from $project$Data where partName is not NULL group by groupName, partName --② 카테고리 데이터 생성 /* 카테고리 데이터 테이블 안에 기존 데이터가 있으면 삭제하세요. delete $project$Category */ --hasCategory (top->1st) insert into $project$Category (source, target, relation ) select 'Thing' as source, class as target, 'hasCategory' as 'relation' from $project$Data group by class -- hasCategory (1st->2nd) insert into $project$Category (source, target, relation ) select class as source, groupName as target, 'hasCategory' as 'relation' from $project$Data where groupName is not NULL group by class, groupName -- hasCategory (2nd->3rd) insert into $project$Category (source, target, relation ) select groupName as source, partName as target, 'hasCategory' as 'relation' from $project$Data where partName is not NULL group by class, groupName, partName -- hasMember (Major Category) insert into $project$Category (source, target, relation ) select class as source, id as target, 'hasMember' as 'relation' from $project$Data where groupName is NULL order by class, id -- hasMember (2nd Category) insert into $project$Category (source, target, relation ) select groupName as source, id as target, 'hasMember' as 'relation' from $project$Data where groupName is not NULL and partName is NULL order by groupName, id -- hasMember (3rd Category) insert into $project$Category (source, target, relation ) select partName as source, id as target, 'hasMember' as 'relation' from $project$Data where partName is not NULL order by partName, id