MySQL / CakePHP вопрос проектирования БД - PullRequest
2 голосов
/ 13 июля 2010

В нашем приложении по недвижимости есть таблица Events, которая исторически была связана с таблицей Homes через столбец Event.homes_id.

Недавно мы впервые добавили тип события, которое связано не с домом, а с риэлтором. Вопрос: является ли хорошей практикой добавление столбца realtor_id в таблицу Events? Что-то во мне восстает против идеи иметь два столбца, home_id и realtor_id для каждой записи, один из которых всегда будет нулевым для любой данной записи. Мой босс говорит, что это эффективно и позволяет избежать лишних затрат на создание новых таблиц. Каковы права и недостатки этой ситуации?

Следствие вышеприведенного вопроса: частью нашего нежелания создавать новые таблицы является тот факт, что мы используем CakePHP, и поэтому становится все сложнее иметь абсолютный контроль над несколькими связанными таблицами через объединения SQL. (Установка максимального значения рекурсивного свойства Cake снижает скорость сканирования приложения.) Влияет ли и должна ли работа с Cake влиять на соображения проектирования базы данных? Или мы просто неправильно работаем с Cake?

Ответы [ 3 ]

2 голосов
/ 13 июля 2010

Что-то во мне восстает при мысли о с двумя столбцами, home_id и realtor_id для каждой записи, один из который всегда будет нулевым для любого данная запись. Мой босс говорит, что это эффективный и избегает накладных расходов создание новых таблиц. Каковы права и недостатки этой ситуации?

Ну, вы правы, это, вероятно, менее эффективно, чем оптимальное. Однако добавление еще одного столбца (INT, не менее), который будет равен 50% времени, не повлияет на общую эффективность вашей базы данных.

OTOH, вам потребуется немного усилий для реструктуризации вашего приложения. Просто добавив этот столбец, вы фактически получаете взлом.

Я думаю, что это приемлемо для этой ситуации, хотя вам может не понравиться ее эстетика. Эй, никто не любит хаки Это увеличивает «технический долг». Но посмотрите на этот термин, и вы увидите, что многие люди говорят, что охватывают технический долг, потому что это позволяет вам продолжать двигаться вперед, а не пытаться найти идеальное решение (которое ускользнет Вы, несмотря на все усилия).

Это бизнес-решение - стоит ли эстетика вашей схемы и кодовой базы стоимость (ваша почасовая ставка * # часов, чтобы «правильно» это исправить)? В этой ситуации я бы сказал, что, вероятно, нет.

2 голосов
/ 13 июля 2010

Мой начальник говорит, что это эффективно и позволяет избежать лишних затрат на создание новых таблиц.

Это кажется мне сомнительным.Я думаю, вам нужен другой дизайн.

В частности, я бы подумал о том, чтобы События принадлежали Домам и Риэлторам.Путем реструктуризации вы избегаете значимости одного из двух идентификаторов.Я бы представлял Риэлторы / Дома для Событий как has_many, а наоборот - как несколько отношений принадлежащих вам, если вам это действительно нужно.

1 голос
/ 13 июля 2010

«мы используем CakePHP, и поэтому становится все сложнее иметь абсолютный контроль» - Почему?

Что вы на самом деле теряете, добавляя еще один столбец?Не много.Гордость, может быть.У всех приложений где-то есть компромиссы, и это крошечный.

"(Установка максимального значения рекурсивного свойства Cake снижает скорость сканирования приложения.)" - Тогда не используйте рекурсивный !Контейнерное поведение делает работу намного лучше, и вы можете получить только данных, из которых вы хотите, насколько глубоко вам нужно идти.

Я бы добавил еще один столбец, оптимизировал с помощью содержимого и перешел к более важнымвещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...