2016년 12월 3일 토요일

Class의 개념

Tags

Classes

OrientDB 자료구조인 class에 대해 배운다. OrientDB에서 class는 몇몇 차이점을 빼면 관계형 데이터베이스에서 table과 유사하다. 이번 섹션에서는 데이터베이스에서 클래스를 보는 방법과 클래스를 생성하는 방법을 배울 것이며, 또한, 클래스의 속성 제약을 정의하여, 클래스의 상단에 스키마를 제공하는 방법을 배울 것이다. 마지막으로, class내에 저장된 record에 접근하는 방법을 배울 것이다.
Class는 객체지향 프로그래밍 패러다임에서 생긴 컨셉이다. OrientDB에서 class는 함께 속해 있는 record들을 위해 정의하는 rule에 대한 데이터 모델이다. 예를들어, Person클래스는, 사람에 대한 정보를 저장할 수 있다. 여러분은, 여러분의 class를 Name, Birthdate, FavoriteNumber, 기타 등등과 같은 특정 속성들을 가져야만 하는 record로 구조화 할 수 있다.
PersonClass
class들은 기존의 document database model에서 collection과 비교되며, class를 table이라고 할 수는 없지만, 관계형 데이터베이스에서는 table과 비교될 수 있다. class는 schema-less와 schema-full, 그리고 나중에 설명할 schema-mixed data 모두의 저장을 위한 효율적인 수단이다.
여러 DBMS처럼, OrientDB는 저장의 단위로 Record를 사용한다. 많은 Record Type이 있지만 Document DatabaseAPI는 항상 Document type을 사용한다. 한 document는 키-값 쌍의 set으로 구성되며, document는 class에 소속될 수 있다.
위의 예에서는, 2개의 document가 있다. 한 document는 Sarah에 대한 정보를 포함하며, 다른 document는 Abdul에 대한 정보이다. key 15:0과 15:1은 문서 각각을 가리킨다(대표한다)
여러분의 시스템에 정의된 class들 모두를 보기 위해 콘솔에서 LIST CLASSES 명령을 사용해라.
orientdb> LIST CLASSES
orientdb {db=playingwithClasses}> LIST CLASSES

CLASSES
+----+-----------+-------------+-----------------+-----+
|#   |NAME       |SUPER-CLASSES|CLUSTERS         |COUNT|
+----+-----------+-------------+-----------------+-----+
|0   |_studio    |             |_studio(13)      |    1|
|1   |Blue       |[Color]      |blue(19)         |    0|
|2   |Color      |[V]          |-                |    0|
|3   |E          |             |e(11),e_1(12)    |    0|
|4   |OFunction  |             |ofunction(6)     |    0|
|5   |OIdentity  |             |-                |    0|
|6   |ORestricted|             |-                |    0|
|7   |ORole      |[OIdentity]  |orole(4)         |    3|
|8   |OSchedule  |             |oschedule(8)     |    0|
|9   |OSequence  |             |osequence(7)     |    0|
|10  |OTriggered |             |-                |    0|
|11  |OUser      |[OIdentity]  |ouser(5)         |    3|
|12  |Person     |[V]          |person(15)       |    0|
|13  |Red        |[Color]      |red(17),red_1(18)|    0|
|14  |V          |             |v(9),v_1(10)     |    0|
+----+-----------+-------------+-----------------+-----+
|    |TOTAL      |             |                 |    7|
+----+-----------+-------------+-----------------+-----+
studio를 사용한다면, 'schema' 탭에서 같은 정보를 확인할 수 있다.
여기서 우리는 데이터베이스에 있는 14개의 class를 확인할 수 있다. Class 12가 Person을 정의한다. Red와 Blue의 상위 class인 Color도 있다. Color와 Person은 V라고 불리는 상위 class가 있다. V class는 OrientDB의 graph모델을 사용하기 위해 중요하다. 튜토리얼에서 상위 class와 V에 대해서는 나중에 더 알아보자.

클래스 시작하기

여러분의 application에서 class들을 사용하기 위해 class가 어떻게 만들어지고 설정될 수 있는지에 대해 이해할 필요가 있다. OrientDB의 class는 관계형 데이터베이스의 Table과 유사하지만, schema-less, schema-full, 혹은 혼합할 수 있다는 점에서 table과는 다르다. class는 다른 class로부터 속성을 상속받을 수 있으며, 그렇게 함으로써 class의 tree를 구성할 수 있다.
각 class는 자신만의 cluster 혹은 cluster들을 가진다(정의되지 않았다하더라도 기본적으로 생성됨). cluster는 record의 뭉치가 저장된 곳이다. 우리는 곧, database 질의의 성능을 향상시키기 위한 clustering 방법을 확인할 것이다.
새로운 class를 만들기 위해서는 CREATE CLASS 명령을 사용한다.
orientdb> CREATE CLASS Student

Class created successfully. Total classes in database now: 15
이 명령은 Student라는 class를 생성한다. CREATE CLASS 에 cluster를 지정하지 않아, OrientDB는 Student class에 할당된 record를 넣기 위한 student라는 cluster에 기본적으로 class Student를 할당한다. 이 때는 class가 아무런 속성과 record가 없다. 이제 CLASSES  의 list와 Studio schema 관리에 표시될 것이다.

클래스의 속성 추가하기

위에서 언급했듯, OrientDB는 schema-less mode를 허용한다. 즉, 속성 없이 class를 정의하는 것을 허용한다는 말이다. 그러나 class의 index나 class의 제약조건을 정의하기 위해서는 속성이 필요하다. 다시 한 번, OrientDB와 관계형 데이터베이스를 비교해보자. 만약 OrientDB의 class가 관계형 데이터베이스의 Table과 유사하다면, 속성은 Table의 칼럼이 될 것이다. Student의 새 속성을 만들기 위해서, CREATE PROPERTY 명령을 사용해라
orientdb> CREATE PROPERTY Student.name STRING

Property created successfully with id=1


orientdb> CREATE PROPERTY Student.surname STRING

Property created successfully with id=2


orientdb> CREATE PROPERTY Student.birthDate DATE

Property created successfully with id=3
위 명령들은 Student class에서 3가지 새 속성을 만든다. 그 속성은 각 학생의 이름, 성, 생년월일에 대한 정의를 하도록 한다.

Class 정보 표시하기

여러분은 가끔 class가 속한 cluster의 정보를 보거나, class에 정의된 속성을 확인할 필요성을 느낄 때가 있을 것이다. INFO CLASS 를 사용하면, 현재 설정된 정보와 class의 속성을 확인할 수 있다. Student class에서 정보를 표시하기 위해 INFO CLASS 를 사용해보자
orientdb> INFO CLASS Student

Class................: Student
Default cluster......: student (id=96)
Supported cluster ids: [96]
Properties:
-----------+--------+--------------+-----------+----------+----------+-----+-----+
 NAME      | TYPE   | LINKED TYPE/ | MANDATORY | READONLY | NOT NULL | MIN | MAX |
           |        | CLASS        |           |          |          |     |     |
-----------+--------+--------------+-----------+----------+----------+-----+-----+
 birthDate | DATE   | null         | false     | false    | false    |     |     |
 name      | STRING | null         | false     | false    | false    |     |     |
 surname   | STRING | null         | false     | false    | false    |     |     |
-----------+--------+--------------+-----------+----------+----------+-----+-----+

속성에 제약사항을 추가하기

제약사항들은 각 속성에 할당된 어떤 값에 대해 제약을 만든다. 예를 들면, type, 최대, 최소 크기, 필수 값 여부, null이 허용되는지 등과 같은 것이 바로 그것이다. 만약 학생의 이름이 'MANDATORY'가 true이면 모든 student class의 record는 반드시 이름을 가져야 한다. 만약 'MIN'이 3으로 지정되면, 모든 이름은 최소 3글자 이상이어야 한다.
참고로 'create a property' 명령에는 'NAME'과 'TYPE' 두 가지만 필수 속성이다.
존재하는 속성의 제약을 추가하기 위해서는 ALTER PROPERTY 명령을 사용한다.
orientdb> ALTER PROPERTY Student.name MIN 3

Property updated successfully
이 명령은 Student에서 name 속성의 제약조건을 추가한다. 이 명령이후에는 Student는 'Name' 속성이 없더라도 저장될 수 있다. 만약 record들이 3글자 미만의 Name 속성을 가진다면 record에 삽입이 거절될 것이다.
Student의 Name이 'MANDATORY' 속성이 true로 된다면 모든 record는 학생의 이름이 추가되는 것을 보장할 것이다.
orientdb> ALTER PROPERTY Student.name MANDATORY true
속성에 제약조건을 사용하는 방법은 여러가지가 있다. 이러한 것들은 여러분의 use case에서 사용될 수 있는 data 모델이 만들어지도록 한다. 제약조건은 application이 사용될 수 있는 값만을 허용하도록 하여, 큰 application의 서로 다른 컴포넌트간의 의사소통을 보장하는데 도움을 줄 수 있다.

Class 클래스에서 Record 보기

OrientDB에서  Class들은 record을 적재하고, 정의한다. 여러분은 OrientDB에 저장되고, 정의된 class에 속한 모든 record를 BROWSE CLASS 명령을 통해 확인할 수 있다. 또, DISPLAY RECORD 명령을 통해 특정 record에 속한 데이터를 확인할 수 있다.
Note: you cannot display a record unless you have recently received a query result with records to browse (select statement, 'browse class x', etc...). 
전에 우리는 Student class를 생성했으며, 여기에 속할 record를 위한 일부 schema를 정의했지만 어떠한 data혹은 record를 추가하지 않았다. 그래서 student class에서 'BROWSE CLASS' 명령은 아무런 결과도 리턴하지 않는다. 다행히, OrientDB는 우리가 질의할 수 있는 미리 정의된 class와 record들이 있다.

OUser class를 보자. 
orientdb> INFO CLASS OUser

CLASS 'OUser'

Super classes........: [OIdentity]
Default cluster......: ouser (id=5)
Supported cluster ids: [5]
Cluster selection....: round-robin
Oversize.............: 0.0

PROPERTIES
----------+---------+--------------+-----------+----------+----------+-----+-----+
 NAME     | TYPE    | LINKED TYPE/ | MANDATORY | READONLY | NOT NULL | MIN | MAX |
          |         | CLASS        |           |          |          |     |     |
----------+---------+--------------+-----------+----------+----------+-----+-----+
 password | STRING  | null         | true      | false    | true     |     |     |
 roles    | LINKSET | ORole        | false     | false    | false    |     |     |
 name     | STRING  | null         | true      | false    | true     |     |     |
 status   | STRING  | null         | true      | false    | true     |     |     |
----------+---------+--------------+-----------+----------+----------+-----+-----+

INDEXES (1 altogether)
-------------------------------+----------------+
 NAME                          | PROPERTIES     |
-------------------------------+----------------+
 OUser.name                    | name           |
-------------------------------+----------------+
Ouser  class는 데이터베이스의 사용자를 정의한다. OUser class에 할당된 record들을 보기위해서는 BROWSE CLASS명령을 수행한다.
orientdb> BROWSE CLASS OUser

---+------+-------+--------+-----------------------------------+--------+-------+
 # | @RID | @Class| name   | password                          | status | roles |
---+------+-------+--------+-----------------------------------+--------+-------+
 0 | #5:0 | OUser | admin  | {SHA-256}8C6976E5B5410415BDE90... | ACTIVE | [1]   |
 1 | #5:1 | OUser | reader | {SHA-256}3D0941964AA3EBDCB00EF... | ACTIVE | [1]   |
 2 | #5:2 | OUser | writer | {SHA-256}B93006774CBDD4B299389... | ACTIVE | [1]   |
---+------+-------+--------+-----------------------------------+--------+-------+
In the example, you are listing all of the users of the database. While this is fine for your initial setup and as an example, it is not particularly secure. To further improve security in production environments, see Security.

BROWSE CLASS 를 수행하면, 첫 칼럼은 id 번호가 나오는데 이것을 이용해 특정 record에 대한 자세한 정보를 확인할 수 있다.
OUser class의 첫 record를 확인하기 위해서 DISPLAY RECORD명령을 사용한다.
orientdb> DISPLAY RECORD 0

DOCUMENT @class:OUser @rid:#5:0 @version:1
----------+--------------------------------------------+
     Name | Value                                      |
----------+--------------------------------------------+
     name | admin                                      |
 password | {SHA-256}8C6976E5B5410415BDE908BD4DEE15... |
   status | ACTIVE                                     |
    roles | [#4:0=#4:0]                                |
----------+--------------------------------------------+
 
마지막에 언급한 BROWSE CLASS 명령을 명심해라. 여러분은 계속해서 다른 record를 확인할 수 있지만, 특정 class를 browse할 때까지는 다른 class로부터 record를 확인할 수는 없다.

This Is The Oldest Page


EmoticonEmoticon

:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:o
:>)
(o)
:p
:-?
(p)
:-s
8-)
:-t
:-b
b-(
(y)
x-)
(h)