"Semantic Data SQL Script"의 두 판 사이의 차이
DH 교육용 위키
(3명의 사용자에 의한 5개의 중간 편집이 숨겨짐) | |||
24번째 줄: | 24번째 줄: | ||
partName nvarchar(40) null, | partName nvarchar(40) null, | ||
label nvarchar(80) null, | label nvarchar(80) null, | ||
+ | hangeul nvarchar(80) null, | ||
+ | hanja nvarchar(80) null, | ||
+ | english nvarchar(160) null, | ||
infoUrl nvarchar(256) null, | infoUrl nvarchar(256) null, | ||
iconUrl nvarchar(256) null, | iconUrl nvarchar(256) null, | ||
+ | note nvarchar(256) null, | ||
+ | remark nvarchar(max) null, | ||
primary key(id) | primary key(id) | ||
) | ) | ||
34번째 줄: | 39번째 줄: | ||
target nvarchar(40) not null, | target nvarchar(40) not null, | ||
relation nvarchar(40) not null, | relation nvarchar(40) not null, | ||
− | attribute nvarchar( | + | attribute nvarchar(256) null, |
+ | note nvarchar(256) null | ||
primary key (source, target, relation ) | primary key (source, target, relation ) | ||
) | ) | ||
45번째 줄: | 51번째 줄: | ||
partName nvarchar(40) null, | partName nvarchar(40) null, | ||
label nvarchar(80) null, | label nvarchar(80) null, | ||
+ | hangeul nvarchar(80) null, | ||
+ | hanja nvarchar(80) null, | ||
+ | english nvarchar(160) null, | ||
infoUrl nvarchar(256) null, | infoUrl nvarchar(256) null, | ||
iconUrl nvarchar(256) null, | iconUrl nvarchar(256) null, | ||
+ | note nvarchar(256) null, | ||
+ | remark nvarchar(max) null, | ||
primary key(id) | primary key(id) | ||
) | ) | ||
52번째 줄: | 63번째 줄: | ||
--④ _____Category ... 계층 분류와 노드 사이의 관계 | --④ _____Category ... 계층 분류와 노드 사이의 관계 | ||
create table $project$Category ( | create table $project$Category ( | ||
− | source nvarchar(40) | + | source nvarchar(40) not null, |
target nvarchar(40) not null, | target nvarchar(40) not null, | ||
relation nvarchar(40) not null, | relation nvarchar(40) not null, | ||
− | attribute nvarchar( | + | attribute nvarchar(256) null, |
+ | note nvarchar(256) null | ||
primary key (source, target, relation ) | primary key (source, target, relation ) | ||
) | ) | ||
109번째 줄: | 121번째 줄: | ||
************************************************************ */ | ************************************************************ */ | ||
− | --① | + | --① 스키마 데이터 생성 |
/* | /* | ||
119번째 줄: | 131번째 줄: | ||
values ('Thing', 'Category', 'Top', 'Thing' ) | values ('Thing', 'Category', 'Top', 'Thing' ) | ||
− | insert into $project$Schema (id, class, groupName, label) | + | insert into $project$Schema (id, class, groupName, label, infoUrl) |
− | select class as id, 'Category' as class, 'Thing' groupName, class as label | + | select class as id, 'Category' as class, 'Thing' groupName, class as label, 'class:'+class as infoUrl |
from $project$Data | from $project$Data | ||
group by class | group by class | ||
− | insert into $project$Schema (id, class, groupName, label) | + | insert into $project$Schema (id, class, groupName, label, infoUrl) |
− | select groupName as id, 'Category' as class, class as groupName, groupName as label | + | select groupName as id, 'Category' as class, class as groupName, groupName as label, 'groupName:'+groupName as infoUrl |
from $project$Data | from $project$Data | ||
where groupName is not NULL | where groupName is not NULL | ||
group by class, groupName | 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> | ||
+ | |||
+ | [[분류:튜토리얼]] |
2023년 2월 16일 (목) 12:57 기준 최신판
/* ---------------------------------------------------------------------------------------------- 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, hangeul nvarchar(80) null, hanja nvarchar(80) null, english nvarchar(160) null, infoUrl nvarchar(256) null, iconUrl nvarchar(256) null, note nvarchar(256) null, remark nvarchar(max) 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(256) null, note nvarchar(256) 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, hangeul nvarchar(80) null, hanja nvarchar(80) null, english nvarchar(160) null, infoUrl nvarchar(256) null, iconUrl nvarchar(256) null, note nvarchar(256) null, remark nvarchar(max) 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(256) null, note nvarchar(256) 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