|
|
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые коллеги. Я обращаюсь к вам за советом. Прошло 3 года с тех пор, как я спроектировал БД для агентства недвижимости. По ряду причин, 3 года спустя, я понимаю, что совершил много архитектурных ошибок и БД тормозит. Особенно запросы где много JOIN'ов и преобразований из XML-полей в плоские данные. На данный момент в базе более 9 000 контрагентов и около 11 000 объектов недвижимости. Настала пора рефакторинга. Ниже я расскажу о структуре БД на сегодня и опишу проблемы с которыми столкнулся. Конфигурация: SQL Server 2005 Standart. 1. Для работы с адресами использую КЛАДР. Экспортировал в базу as is (те же названия таблиц, та же структура). 2. Таблица объектов недвижимости. На сегодня у нас 6 типов объектов недвижимости на продажу (квартиры, дома, участки, дачи, коммерция, гаражи) + аренда (представлена как отдельный тип объекта недвижимости). Все типы объектов хранятся в одной таблице. С периодичностью раз в месяц риэлторы просят добавить какое-нибудь поле к объекту или удалить. Сейчас в таблице 136 полей. Все бы ничего, но больше всего усложняют жизнь поля типа XML. в них я храню множественный выбор. Например агент отмечает чекбоксами куда в квартире выходят окна. В поле таблицы этот выбор сохраняется в таком виде Код: plaintext 1. 2. 3. 4. у меня есть плоский справочник вида Код: plaintext 1. 2. id - выше в XML это как раз id_item из плоского справочника. И все бы ничего, но когда приходится фильтровать данные по значениям этих XML-полей (например: выбрать все квартиры с окнами во двор) - база начинает жутко тормозит. Вторая головная боль это КЛАДР. То как у нас построена иерархия краев, городов и улиц и как это реализовано в КЛАДР просто взрывает мой мозг. Но может быть на тот момент это был наилучший вариант. Разработчикам КЛАДР виднее. НО - в таблице объектов недвижимости мне приходится хранить все 5 уровней адреса из справочника КЛАДР Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Это на тот случай, если в КЛАДР отсутсвует Н/П или улица, то риэлтор вводит ее название руками и я сохраняю это название в нужном уровне (например если он ввел руками улицу, то сохраняю в поле AddressLevel5) Сейчас я понимаю, что очень жестко ошибся при проектировании БД и все нужно было сделать по другому. Но как это сделать правильнее и оптимальнее я не знаю и прошу помощи у вас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 12:18 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
Paco Сейчас я понимаю, что очень жестко ошибся при проектировании БД и все нужно было сделать по другому. Но как это сделать правильнее и оптимальнее я не знаю и прошу помощи у вас. Сделай по другому и перенеси туда данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 12:51 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
Злой БобрPaco Сейчас я понимаю, что очень жестко ошибся при проектировании БД и все нужно было сделать по другому. Но как это сделать правильнее и оптимальнее я не знаю и прошу помощи у вас. Сделай по другому и перенеси туда данные. Именно так и хочу поступить. Осталось выяснить как сделать по другому :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 13:02 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
PacoИменно так и хочу поступить. Осталось выяснить как сделать по другому :)Так вы сами сказали: "больше всего усложняют жизнь поля типа XML. в них я храню множественный выбор" Сделайте обычные связи 1-много или много-много и будет счастье. Для объектов недвижимости используйте структуру с наследованием объектов или ЕАВ. ЕАВ только если действительно очень часто меняются атрибуты. Но в общем главное откажитесь от XML - он тут совсем никаким боком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 13:40 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
alexeyvgДля объектов недвижимости используйте структуру с наследованием объектов или ЕАВ. ЕАВ только если действительно очень часто меняются атрибуты. Что такое структура с наследованием объектов или EAB? Ниразу не слышал. Где почитать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 14:42 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
PacoЧто такое структура с наследованием объектов?Таблица объект с полем тип и ИД 6 таблиц: квартиры, дома, участки, дачи, коммерция, гаражи, аренда в каждой ИД, ссылается на таблицу объект В таблице объект общие атрибуты, в остальных специфические. при создании записи создаётся запись в объект и запись в вдной из дочерних таблиц PacoЧто такое EAB? EAV - модель Entity-Value-Atribute. Таблицы тип параметра и значение параметрата с привязкой к объекту, владеющему этими значениями параметров. Это всё очень кратко. PacoНиразу не слышал. Где почитать?На этом форуме поищите ну и в инете, по обоим темам. Только аккуратно на этот раз проектируйте, чтобы опять не понять через 3 года, что... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 16:22 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
> Для работы с адресами использую КЛАДР Можно поинтересоваться зачем? > 6 типов объектов недвижимости на продажу (квартиры, дома, участки, дачи, коммерция, гаражи) + аренда > (представлена как отдельный тип объекта недвижимости) Странный подход. Есть жилая недвижимость. Есть нежилая недвижимость соответствующего назначения. Есть земельные участки (назначение + постройки + коммуникации, которые также будут зависеть от назначения). > Все типы объектов хранятся в одной таблице Т. е. вы полагаете, что квартира и дачный участок - одна и та же сущность? ;) > поля типа XML В реляционной БД? ;) > Разработчикам КЛАДР виднее Ну то есть даже собственный результат использования не заставляет вас задуматься о рациональности структуры? ;) > как это сделать правильнее и оптимальнее Судя по вашему описанию, правильнее было бы спроектировать базу данных с нуля. Но будет ли это дешевле и быстрее - вопрос, на который у меня нет ответа. Вообще с недвижимостью сложно. Можно, например, выделять типовую недвижимость, - это правильно, но громоздко. Вопрос в данном случае не о правильности структуры, а о вашей квалификации - хватит ли ее для того, чтобы построить структуру данных приемлемого качества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 16:43 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
alexeyvgТолько аккуратно на этот раз проектируйте, чтобы опять не понять через 3 года, что... :-) Спасибо, на этот раз выложу новую схему БД сначала сюда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 19:32 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Для работы с адресами использую КЛАДР Можно поинтересоваться зачем? Наверно Вы никогда не работали в подобных организациях :) До ведения объектов в БД они вели все в Экселевском файле. Там только "ул. Ленина" была написана в 5 разных вариантах. Не говоря уже о написании городов и районов. КЛАДР для порядка. Опять же для удобного поиска. > 6 типов объектов недвижимости на продажу (квартиры, дома, участки, дачи, коммерция, гаражи) + аренда > (представлена как отдельный тип объекта недвижимости) Странный подход. Есть жилая недвижимость. Есть нежилая недвижимость соответствующего назначения. Есть земельные участки (назначение + постройки + коммуникации, которые также будут зависеть от назначения). Да, все верно. Жилая, не жилая. Также 1 тип может переходить в другой. Например на участке могут построить дом :) > Все типы объектов хранятся в одной таблице Т. е. вы полагаете, что квартира и дачный участок - одна и та же сущность? ;) и то и то недвижимость - они обладают как общими атрибутами: адрес, коммуникации. Так и специфичными для конкретного вида недвижимости. > Разработчикам КЛАДР виднее Ну то есть даже собственный результат использования не заставляет вас задуматься о рациональности структуры? ;) Есть альтернатива КЛАДР? Есть другой свободный источник адресов, в котором постоянно поддерживается актуальность информации? > как это сделать правильнее и оптимальнее Судя по вашему описанию, правильнее было бы спроектировать базу данных с нуля. Но будет ли это дешевле и быстрее - вопрос, на который у меня нет ответа. Вообще с недвижимостью сложно. Можно, например, выделять типовую недвижимость, - это правильно, но громоздко. Вопрос в данном случае не о правильности структуры, а о вашей квалификации - хватит ли ее для того, чтобы построить структуру данных приемлемого качества. Если бы было достаточно кваллификации, думаю Вы не увидели бы этого поста здесь :) Но с правильной подсказкой я найду выход :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 19:43 |
|
||
|
Проектирование БД для объектов недвижимости
|
|||
|---|---|---|---|
|
#18+
> КЛАДР для порядка. Опять же для удобного поиска. Ну то есть имеющийся порядок вас устраивает? > Жилая, не жилая. Также 1 тип может переходить в другой. Например на участке могут построить дом Не на любом участке. Вам нужно, видимо, более основательно поинтересоваться принципами оборота земли и зонами ответственности за строения на ней. В данном случае нет смысла ориентироваться на сложившуюся практику, проще реализовать требования законодательства. > и то и то недвижимость Если бомж спит в коробке из-под холодильника - это тоже недвижимость? > они обладают как общими атрибутами: адрес, коммуникации Могут обладать. Точно так же цвет, например, универсальная характеристика. Но о сущности, которая обладает таким признаком, ничего сказать нельзя. И абсолютно глупо хранить все сущности с признаком "цвет" одинаковым образом. > Есть альтернатива КЛАДР? Это неправильный вопрос. Вопрос должен формулироваться так: что нужно сделать, чтобы иметь данные об изменениях адресов. Ответ: дополнительно - ничего. Нет необходимости. Есть нормальная структура для хранения адресных данных. И есть КЛАДР. Хотите вносить изменения в свою структуру - на здоровье. Но это отдельная структура и она должна существовать автономно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2010, 20:18 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36998059&tid=1542420]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
169ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 516ms |

| 0 / 0 |
