모든 model 에 대해서 기본적인 column(attribute) 가 존재하긴 하지만 사용하는 사람 입장에서는 여러 자유도를 갖기를 원한다. 그래서 많은 서비스들은 custom column 을 추가할 수 있는 기능을 제공한다. 이를 위해 Entity–attribute–value model (https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model ) 을 구현해야 한다. 이 대신 json 이라는 구조를 사용할 수도 있다.  mysql 이나 postgresql 에서 json 이나 josnb 구조를 제공한다. 이를 이용해 자유롭게 정의 가능한 custom column 을 제공한다.

 

제공 가능한 data type 들은 number, string 형이다. 여기에 string 형에 일정한 format 을 갖추어, date(YYYY-MM-DD), time(HH:MM:SS), datetime(YYYY-MM-DD HH:MM:SS) 을 제공할 수 있다. number 형도 string format 을 제공해 decimal 형도 제공할 수 있다. (json 이나 jsonb 를 사용하는 경우 number 형의 경우 유효숫자에 제한이 있을 수 있으므로 string format 형이 더 좋을 것으로 보인다. )


 그리고 json 이나 jsonb 의 경우 array 나 dictionary 형으로도 custom column 을 제공할 수 있다. 

 기본적인 Data type에 추가적으로 다른 model 도 custom field 가 될 수 있다.  EAV Model 이나 json 을 이용하는 형태는 foreign key 를 제공할 때, 제약(restrict)을 database 를 이용해서 걸기가 어렵다. 이를 위해 Many-to-many 용 association table 을 미리 만들어 둘 수 있다.