Система автоматической генерации схемы базы данных? - PullRequest
2 голосов
/ 13 января 2011

Я работаю с клиентом, у которого есть специальное программное обеспечение для веб-сайта, которое я еще не виделОн имеет базу данных MySQL, но большинство таблиц автоматически генерируются кодом php.Это позволяет конечным пользователям создавать таблицы и поля по своему усмотрению.Так что это база данных в базе данных, но, очевидно, без всех функций, доступных в «самой внешней» базе данных.Есть пара таблиц, которые в основном отображают автоматически сгенерированные имена и поля таблиц в удобные для пользователя имена и поля таблиц. * Это делает запросы очень интуитивно понятными: P

Они ищут некоторые дополнительные функции, напримеркоторые сразу же становятся доступны при непосредственном использовании базы данных, например, принудительное использование типов данных, внешние ключи, уникальные индексы и т. д. Но поскольку это база данных в базе данных, все эти функции должны быть добавлены в код php, который запускает базу данных.Первое, что мне пришло в голову, это Inner Platform Effect * - но я не вижу способа выйти из эмуляции базы данных и при этом предоставить им необходимые функции!

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

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

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

1 Ответ

2 голосов
/ 15 января 2011

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

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

После этого генерация DDL довольно тривиальна. Перебирайте таблицы, просматривайте столбцы, создавайте команду CREATE TABLE. Единственное неудобство - вам нужно упорядочить таблицы так, чтобы родители создавались раньше детей. Это не сложно, реализовать http://en.wikipedia.org/wiki/Topological_ordering

На втором уровне сначала необходимо изучить существующую базу данных, а затем иногда только вводить команды ALTER TABLE ADD COLUMN .... Так что это начинает усложняться.

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

Возможно, вы захотите подумать, сколько из этого вы действительно хотите поддержать, а затем сделать ценностное суждение о его кодировании.

Мой триангулярный проект делает это: http://code.google.com/p/triangulum-db/, но это только на Альфе 2, и я бы не рекомендовал использовать его в производственной ситуации.

Вы также можете взглянуть на Doctrine, http://www.doctrine -project.org / , у них есть своего рода текстовый словарь для построения баз данных, но я не уверен, насколько далеко они " ушел с этим.

...