ВСТАВИТЬ с подтипом SuperType - PullRequest
1 голос
/ 03 июня 2011

В настоящее время я работаю с БД, которая использует структуру подтипа / супертипа.Мне интересно, лучший подход к обработке вставок.Сохраняю ли я заполнение нескольких таблиц в самом SQL, или с помощью PHP, или даже из двух этих комбинаций?

Я использую MySQL / PHP (с Yii Framework)

/// РЕДАКТИРОВАТЬ ///

Не знаю, что случилось с понижением голосов.Не осознавал важность таблиц, так как это общий подход.Но вот пример.Если создается Партия, как Бизнес и / или Пользователь заполняются этим PartyId?SQL / PHP / Оба?

enter image description here

Ответы [ 4 ]

2 голосов
/ 04 июня 2011

«Стандартный» подход заключается в создании одного обновляемого представления для каждого подтипа. Каждое обновляемое представление объединяет супертип с одним подтипом.

Тогда код приложения обычно использует представление, а не базовые таблицы.

На большинстве платформ это означает, что вам нужно написать несколько триггеров.

0 голосов
/ 07 июня 2011

Возможно, вы захотите пройтись по нескольким учебникам, чтобы лучше понять, как Yii работает с реляционными моделями данных.См. http://www.larryullman.com/series/learning-the-yii-framework/ и http://www.yiiframework.com/doc/blog/

На данный момент у вас, похоже, нет вопроса Yii, но есть более простой вопрос моделирования базы данных - я уверен, что их достаточноиз учебников по этому вопросу, но если вы заинтересованы в изучении Yii в то же время, эти ссылки являются хорошим началом.

0 голосов
/ 04 июня 2011

Я полагаю, поскольку вы указали в теге Yii, что вы на самом деле используете Yii?Нормальным было бы создать класс activerecord для каждого из них.Вам все равно придется перенести полученный PartyId в один из двух других классов.В большинстве случаев это делается с помощью назначения.

$oTransaction = Yii::app()->db->beginTransaction;
$oParty->save();
if ($oParty->PartyType == ...)
{
   $oBusiness->BusinessId = $oParty->PartyId;
   $oBusiness->save();
}
else
   Do User things
$oTransaction->commit();

Вероятно, лучше было бы сделать это, возможно, даже использовать наследование в классах AR, но я не знаю, спасет ли это какую-либо работу,Лучше всего дать вашей модели Party функцию, которая будет возвращать экземпляр Business или User, я думаю.

Самым чистым способом было бы также сохранить бизнес / пользователя в методе AfterSave () части, где у вас есть PartyId.Но тогда вашей партийной модели нужны данные для этого.

0 голосов
/ 04 июня 2011

Я совершенно не понимаю, о чем вы спрашиваете.

Если вам нужно добавить строку в таблицу Party, то вы делаете:

INSERT INTO party [...]

Тогда, если вам нужна вставка в Businessвы делаете

INSERT INTO business [...]

Просто так да.

Если вы хотите быть в безопасности, оба запроса будут выполнены, начните транзакцию

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