Что лучший способ состоит в том, чтобы абстрагировать базу данных из приложения PHP?

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

Во-первых, вы должны «обрезать» свой график. Любые узлы первой степени следует обрезать так, чтобы их связанный край был направлен на обрезанный узел. Поскольку никакое другое ребро не может указывать на этот узел, мы знаем, что этот выбор является оптимальным. Промойте и повторяйте, пока все оставшиеся узлы не будут иметь два или более краев.

Далее, как вы упомянули, вы должны исключить любые изолированные узлы. На самом деле вы можете расширить это до подключенных компонентов из size <= 3. Это связано с тем, что для максимум трех узлов количество ребер не может превышать количество узлов, поэтому вы можете случайным образом назначить одно ребро, а остальные станут на свои места.

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

6
задан bcosca 11 October 2010 в 06:07
поделиться

8 ответов

Использование ORM обычно является предпочтительным способом абстрагирования базы данных. Неполный список реализаций PHP доступен в Википедии .

7
ответ дан 8 December 2019 в 04:10
поделиться

Вообще говоря, если у вас возникнут проблемы с использованием базы данных, тогда ваше приложение выиграет от использования специфических функций к «бренду» базы данных, и будет более надежным приложением для него.

Очень редко переходить с одной системы баз данных на другую. Единственный раз, когда вы реально можете подумать, что стоит реализовать функцию, это если вы пишете какую-то слабосвязанную систему или среду, предназначенную для массового потребления (например, Zend Framework или Django).

1
ответ дан 8 December 2019 в 04:10
поделиться

Вы можете использовать различные фреймворки, такие как PDO, PEAR :: MDB2 или Zend_Db, но, если честно, через 12 лет При разработке PHP мне никогда не приходилось переходить с одного типа инфраструктуры хранения данных на другой.

Чрезвычайно редко даже переходить с чего-то, похожего на Sqlite, на MySQL. Если бы вы сделали больше, у вас все равно были бы гораздо большие проблемы.

8
ответ дан 8 December 2019 в 04:10
поделиться

Это звучит хорошо в теории, но по всей вероятности ЯГНИ .

1
ответ дан 8 December 2019 в 04:10
поделиться

Мне всегда нравилось использовать ADOdb. Из того, что я видел, похоже, что он способен переключаться между совершенно разными платформами.

http://adodb.sf.net

1
ответ дан 8 December 2019 в 04:10
поделиться

Лучший способ - использовать библиотеку ORM (объектно-реляционное отображение). Их много для PHP. Я лично использовал и могу рекомендовать доктрину orm (я использовал ее в сочетании с silex, который представляет собой минималистичный фреймворк php).

Вот поток StackOverflow о PHP ORM, где вы можете найти несколько альтернатив, если хотите: Хорошая библиотека PHP ORM?

2
ответ дан 8 December 2019 в 04:10
поделиться

Вы должны заглянуть в библиотеку PDO .

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

PDO не обеспечивает абстракцию базы данных; он не переписывает SQL и не эмулирует отсутствующие функции. Вы должны использовать полноценный слой абстракции, если вам нужно это средство.

2
ответ дан 8 December 2019 в 04:10
поделиться

Axon ORM автоматически обнаруживает изменения в вашей схеме, не требуя перекомпоновки кода.

0
ответ дан 8 December 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: