Работаю с базой данных отелей по API, сейчас занят тем что кэширую статичную информацию.
Собственно вопрос о том, как все данные хранить
Вот пример информацией об отеле
{
"gen_timestamp": 1381489054.0071,
"hotels": [
{
"id": "1058790",
"cityId": "895",
"stars": "2",
"pricefrom": null,
"rating": "0.0",
"popularity": "1150",
"propertyType": "",
"checkOut": "",
"checkIn": "",
"distance": "1.00",
"photoCount": "3",
"photos": [
{
"url": "http://photo.hotellook.com/image_v2/original/151594987.jpg",
"width": "298",
"height": "240"
},
{
"url": "http://photo.hotellook.com/image_v2/original/682702387.jpg",
"width": "320",
"height": "240"
},
{
"url": "http://photo.hotellook.com/image_v2/original/700461773.jpg",
"width": "320",
"height": "239"
}
],
"facilities": [
"22",
"7",
"43",
"3",
"41",
"14",
"9",
"83",
"25",
"13",
"56",
"80",
"37"
],
"shortFacilities": [
"restaurant",
"parking",
"laundry",
"internet",
"pool"
],
"location": {
"lat": "6.256917",
"lon": "81.236275"
},
"name": {
"en": "Wila Safari"
},
"address": {
"en": "WEERAWILA"
},
"link": "/LK/Weerawila-895/Wila_Safari-1058790.html"
}
]
}
Получаю эту информацию дела запрос по определенному "месту". условно - "город".
Сначала я сделал как - создал таблицу под отели куда вносил все из примера выше кроме того, что выглядело как множество - т.е. фото, facilities, shortFacilities - эти таблицы выглядели примерно так
catid, id, name(type), cityid
catid - автоинкремент, чтобы у каждой записи был уникальный номер
id - принадлежность к отелю
name(type) - смотря что за таблица - номер или название
cityid - эту переменную я ввел чтобы при обновлении последующем по городу можно было бы делая один запрос удалять данные перед записью новых.
И собственно, столкнулся со следующей проблемой. - к примеру делаю запрос для "город" - Гоа с id 395
- и запрос вернет отели не только "cityId": "395", но и многие другие, так как Гоа не конкретное место, а штат. и для каждого из этих "других" городов делать запрос - там отели в выдаче будут дублироваться
поэтому получилось, что во-первых в моей схеме не будут учтены данные о принадлежности к разным местам одного отеля.
и получается делая запрос к местности с определенным ID я не могу просто по этому ID удалить отели и фото из базы, чтобы внести новые данные.
для главной таблицы отелей можно REPLACE допустим использовать, но тогда не получу нигде принадлежности к разным "городам", а таблица с фото, facilities, shortFacilities - их чтобы очистить нужно будет под каждый отель отдельный запрос DELETE делать.
ну и городов очень много - более 30тыс. во многих очень много отелей, поэтому процесс получения и обновления данных должен быть максимально быстрым и простым. иначе и за сутки столько информации сервер не переварит.