1

Я определяю совершенно новую базу данных. Я столкнулся с проблемой , которую я бы назвал «обычной», но до сих пор не смог найти хорошую информацию . Так вот проблема:Как создать таблицу mysql со многими ассоциациями hasMany в CakePHP?

У меня есть много таблиц в моей базе данных (которые я бы назвал в качестве руководства), такие как:

  • Навыки
  • Места
  • Деятельность
  • и так далее .. .

Теперь для всех этих типов направляющих я хотел бы добавить функцию комментария и другие подобные функции, такие как добавление изображений и видео. У меня много типов гидов, поэтому я отказался от идеи иметь отдельный комментарий и видео-таблицы для каждого из них. Мне нужна одна таблица для каждого из них.

Вопрос в том, что это лучший способ достичь этого? Я слышал и читал о 3 решениях, и я не знаком ни с одним из них.

  1. Я читал об использовании UUID, исправил бы эту проблему, но я не очень хорошо знаю, как они функционируют. Может ли кто-нибудь уточнить это, если это правильный путь? Something about UUIDs I read but not quite understood it.

  2. Другая вещь, о которой я читал, - это создание иерархической модели «древовидной таблицы», которая будет содержать ссылки на ассоциации. Дополнительная информация: Managing Hierarchical Data in MySQL.

  3. Я также прочитал о создании таблиц объектов и использовании программной наследования объектов внутри MySQL аналогично иерархической модели.

UUIDs звук самый простой, поэтому я был бы признателен за помощь в работе.

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

  • Я хотел бы создать новую таблицу: Руководства, которые могут иметь поле UUID.
  • Затем соедините все эти типы направляющих (навыки и т. Д.), Чтобы вести таблицу (руководство как родительское, а другое как дочернее).
  • Родители и дети имеют как поля UUID, так и при создании руководства. Родитель и ребенок получают одинаковый UUID, чтобы они могут быть связаны. У ребенка также есть собственное поле идентификатора.
  • Затем добавьте комментарии к руководствам, используя поле UUID, которое указывает на Руководство плюс отдельное поле id int для комментариев.

Скажите, пожалуйста, правильно ли это, или это полный мусор, и если да, то как я должен это делать?

ответ

0

я прочитал больше о UUID, и так как они позволяют использовать широкий уникальные идентификаторы я был в состоянии сделать «наследование» стиль базы данных.

Я использовал свой собственный префикс в начале каждого имени таблицы, чтобы избежать конфликтов имен табличных имен, таких как объект. Вы можете использовать любой префикс, например: my_, и использовать его как: my_object. В этом примере все таблицы должны использовать префиксы.

Итак, я создал таблицу объектов. Он имеет поле id с двоичным (36) типом. Торт признает это полем UUID. Затем я использовал 1: 1 идентифицирующие отношения и унаследовал от него другие таблицы, которые я хотел бы взаимодействовать с другими.

Таким образом, я создал связь 1: 1 с комментариями, видео, картинками, чтобы таблица имела идентификационный внешний ключ, являющийся также первичным ключом.

Затем я создал таблицу сопоставлений, в которой я использовал две неизменяемые отношения 1: 1 без первичного ключа. Это означает, что это действительно отношение HABTM к себе.

Теперь это позволяет мне «наследовать» другие таблицы из таблицы «Объекты», например, «Таблица новостей», снова идентифицируя отношения 1: 1. Затем было возможно связать комментарии или что-либо другое, которое имеет отношение идентификации 1: 1 к объекту, в таблицу новостей, используя таблицу сопоставлений.

Я надеюсь, что это поможет другим, которые также обдумывают это решение.

0

Проверьте http://cakeapp.com, создайте свой макет базы данных и загрузите SQL позже.

+1

http://cakeapp.com/sqldesigners/sql/testcase Вот что я пробовал, и он выглядит нормально, но я беспокоюсь о том, есть ли вероятность того, что если шансы/места/вещи получат один и тот же файл-путеводитель, он нарушит систему, потому что тот же руководство будет относиться к нескольким «реальным путеводителям». Или я просто беспокоюсь ни о чем? – Pehmolelu

1

У вас есть об использовании нормального отношения hasMany с условием? Read about it here.

class Skill extends AppModel { 
    var $hasMany = array(
    'Comment' => array(
     'className'  => 'Comment', 
     'conditions' => array('Comment.type' => 1), // 1 for skills, 2 for places etc. or something like that. 
    ) 
    ); 
} 
+0

+1 A.k.a. полиморфные ассоциации. – deceze

+0

У меня есть, но если бы я понял это правильно, он разрывает связи между этими таблицами, и они должны быть закодированы вручную. Я хочу найти решение, которое, если возможно, не сломает ссылки. Или насколько хорошо cakephp обрабатывает такой тип решения? – Pehmolelu

Смежные вопросы