사용자가 미니 데이터베이스를 만들 수 있도록 iPhone 앱에서 작업하고 있습니다. 사용자는 사용자 정의 데이터베이스 스키마를 생성하고 표준 데이터 유형 (예 : 문자열, 숫자, 부울)뿐만 아니라 객체 및 데이터 유형의 모음 (예 : 숫자 배열)과 같은 다른 복합 유형을 가진 열을 추가 할 수 있습니다.동적 데이터베이스를 만드는 iOS 앱의 핵심 데이터 관리 객체 모델 설계
예를 들어, 사용자는 자신의 식사를 기록하기위한 데이터베이스를 만들 수 있습니다.
식사 데이터베이스 :
[
{
"timestamp": "2013-03-01T13:00:00",
"foods": [1, 2],
"location": {
"lat": 47.253603,
"lon": -122.442537
}
}
]
식사 - 음식 데이터베이스 :
[
{
"id": 1,
"name": "Taco",
"healthRating": 0.5
},{
"id": 2,
"name": "Salad",
"healthRating": 0.8
}
]
이 같은 응용 프로그램에 대한 데이터베이스를 구현하는 가장 좋은 방법은 무엇입니까?
사용자가 위의 예에서와 같이 새 데이터베이스 스키마를 생성, 정의 테이블이 다음과 같이 표시됩니다
나의 현재 솔루션은 응용 프로그램에 대해 다음 데이터베이스 스키마를 만드는 것입니다 이 : 사용자가 데이터베이스를 채 웁니다
+----+-----------+--------------+------------+-----------------+
| id | parent_id | name | data_type | collection_type |
+----+-----------+--------------+------------+-----------------+
| 1 | | meal | object | |
| 2 | 1 | timestamp | timestamp | |
| 3 | 1 | foods | collection | list |
| 4 | 1 | location | location | |
| 5 | | food | object | |
| 6 | 5 | name | string | |
| 7 | 5 | healthRating | number | |
+----+-----------+--------------+------------+-----------------+
, 기록 테이블은 다음과 같이 표시됩니다
이 방법에 대한 16,+----+-----------+---------------+------------------------+-----------+-----+
| id | parent_id | definition_id | string_value | int_value | ... |
+----+-----------+---------------+------------------------+-----------+-----+
| 1 | | 1 | | | |
| 2 | 1 | | 2013-03-01T13:00:00 | | |
| 3 | 1 | 2 | | 1 | |
| 4 | 1 | 2 | | 2 | |
| 5 | 1 | 4 | 47.253603, -122.442537 | | |
+----+-----------+---------------+------------------------+-----------+-----+
자세한 내용 :
값 다른 데이터 유형은 기록 테이블의 다른 컬럼에 저장됩니다. 값을 올바르게 파싱하는 것은 앱에 달려 있습니다 (예 : timestamp int_value를 날짜 객체로 변환).
제약 조건 및 유효성 검사는 데이터베이스 수준에서 불가능하므로 앱에서 수행해야합니다.
이 접근법의 다른 단점은 무엇입니까? 더 좋은 해결책이 있습니까?
)을 사용하는 것이 더 적합 할 수 있습니다. "EAV"검색. 힌트 : "사용자는 사용자 정의 데이터베이스 스키마를 만들 수 있습니다". 그래서 당신은 * a * data * * base *를 관리하는 시스템을 무엇이라고 부릅니까? 그렇다면 응용 프로그램은 무엇입니까? 그러면 어떻게 그 fuctionality에 대한 코드를 작성하는 것을 피할 수 있습니까? – philipxy
핵심 데이터가 데이터베이스가 아니므로이를 사용하려고하면 Pit of Despair가 발생합니다. – quellish
@quellish 나는 핵심 데이터가 SQLite (스토어로 선택된 경우) 위에 추상 레이어처럼 작동한다는 것을 알고 있습니다. SQLite에서 Core Data를 사용하는 대신 더 좋은 방법은 무엇입니까? –