2009-09-10 3 views
0

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

Однако, поскольку развитие развивается дальше, я боюсь, что существует риск потерять зрение во всех отношениях между 30+ таблицами, хотя мы используем хорошо нормированные данные. Так что было бы неплохо, если бы получили хотя бы отношения между таблицами, задокументированными.

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

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


Это приложение было создано более 10 лет назад и имеет более 3000 платежных клиентов, которые все используют его. Это на самом деле основано на документах, используя XML-документ для внутреннего хранилища. База данных используется только как хранилище, а одна процедура импорта/экспорта преобразует ее обратно в XML. К сожалению, структура XML не очень практична для работы с документацией, и для этого документа XML есть второй слой, чтобы выставить его в качестве объектной модели. Эта объектная модель также далека от совершенства, но это то, что 10 лет разработки может сделать для приложения. Мы хотим улучшить его, но это требует времени, и мы не можем разочаровать нынешних пользователей, задерживая новые обновления.
В принципе, мы придерживаемся своего нынешнего дизайна и улучшаем его, мы должны убедиться, что все хорошо документировано. Это то, над чем я сейчас работаю.

+0

Я не думаю, что вы хотите получить ответ на свой вопрос, так как вы отклонили все полезные советы, которые были даны вам. Вы считали, что просто используете окно «Отношения» в виде диаграммы, где вы создаете соединения, но не применяете RI? На данный момент я даже не понимаю, что вы ищете. –

ответ

2

Только 30+ столов? Не требуется всего полчаса или часа, чтобы создать все необходимые отношения. Который я призываю вас делать. Да, я знаю, что вы указываете свои проверки кода для них. Но что, если вы пропустили некоторые? Что, если действительно есть осиротевшие записи? Как вы узнаете? Или у вас есть процедуры проверки пули, которые проходят через все ваши таблицы, ища все эти проблемы? .

Используйте великоватый 23" ЖК-монитор и иметь на него

+0

Дома, я использую два монитора, один 24 дюйма и другой 25,5 дюйма. :-) И действительно, изменение базы данных путем добавления отношений не должно быть слишком большим. Но что, если я не хочу изменять базу данных? Все, о чем я думаю, это простой инструмент, который читает структуру базы данных, которая может угадать около 75% всех отношений, а затем позволяет пользователю добавлять/изменять и удалять эти отношения без изменения базы данных? Только для документации? Никто никогда не делал такого инструмента? –

+0

@ Тони Тоуэнс: Разве вы не имеете в виду: «Должно занять полчаса или час ...»? – onedaywhen

+1

Alex. Зачем кому-то делать такой инструмент, чтобы угадывать отношения? Любой, кто разрабатывает базы данных, должен создавать отношения. Период. Также сделайте диаграмму отношений в тестовой копии базы данных. И это ваша документация. Распечатайте его на плоттере. (Диаграмма отношений одной из моих систем была 4 'шириной и 3' высотой, поэтому нам пришлось использовать плоттер для нее.) –

0

Возможно, там есть инструмент, который может «угадать» отношения, но я сомневаюсь. Честно говоря, я боюсь баз данных без надлежащих внешних ключей в частности и многопользовательских приложений, которые используют Access как СУБД. Я предполагаю, что приложение должно быть своего рода внутренним инструментом, иначе я бы предложил вам перейти к надлежащей СУБД (бесплатно SQL Express) и добавляет внешние ключи.

+0

На самом деле, это коммерческий продукт с 3000+ пользовательской базой. :-) С другой стороны, нередко приложения используют базу данных Access как базу данных, так как она проста в использовании. (Enterprise Architect, инструмент UML, также использует Access для своих моделей!) Вы правы, базы данных без отношений страшны, но они поддерживаются достаточно хорошо. Мы рассматриваем лучшие варианты, но прямо сейчас нам нужно поддерживать это приложение, которое уже используется более 10 лет ... –

+0

Ну, так как это коричневое поле, может быть довольно сложно заменить базу данных, но она все равно должна быть выполнимо. Опять же, если DAL хорош и чист, ROI при замене БД может быть низким – Kasper

+0

Замена БД не является проблемой. Мы заменим его на модель документа, где БД даже не существует. Мы уже используем XML-документ в памяти, и мы будем использовать его для экспорта данных в XML, чтобы пользователи выбирали файл вместо записи из базы данных. Это решает немало проблем. Но прежде чем мы это сделаем, мы просто хотим иметь хорошее представление о текущей структуре базы данных. Мы можем сделать это без инструмента, но хороший инструмент может сэкономить нам некоторое время. –

1

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

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

Например, я использую схему, как этот:

Table Product 
- Field ID   /* The Unique ID for a Product */ 
- Field Designation 
- Field Cost 

Table Order 
- Field ID   /* the unique ID for an Order */ 
- Field ProductID 
- Field Quantity 

Взаимоотношение легко обнаружить, если смотреть на Order: Order.ProductID связан с Product.ID и это можно легко определить, из кода, проходя через каждое поле.

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

Другое решение - если каждый уникальный идентификатор вашей таблицы соответствует другой схеме нумерации.
Произнесите Order.ID фактически следуя схему, как OR001, OR002 и т.д. и Product.ID следующий PD001, PD002 и т.д.
В этом случае, пройдя через все поля во всех таблицах, вы можете осуществлять поиск FK записей, которые соответствуют каждому ПК ,

Если вы следуете разумному соглашению для присвоения имен вашим полям и таблицам, вы можете, возможно, автоматизировать обнаружение отношений между ними, сохранить их в таблице и вручную пройти, чтобы внести исправления.
Как только вы закончите, используйте эту таблицу результатов, чтобы на самом деле построить отношения из кода с помощью метода Database.CreateRelation() (найдите документацию Access, там есть пример кода).

+1

Для еще одного более сложного соглашения об именах см. «Соглашения о назначении таблиц и полей в Tony» http://www.granite.ab.ca/access/tablefieldnaming.htm –

+0

К счастью, мы использовали строгую схему именования с двумя или тремя исключениями. :-) Просто мы не хотим изменять базу данных для документирования этих отношений. Мы фактически пытаемся отойти от модели базы данных и к модели документа. Модель базы данных была выбрана 10 лет назад в качестве решения, и она оказывается слишком ограничительной. –

+0

@Tony Toews: будь справедливым: разместите свое самопознанное непопулярное соглашение об именах в качестве отдельного ответа, чтобы мы могли его проголосовать. – onedaywhen

1

Вы можете построить небольшой кусок VBA код, разделенный на 2 части:

  1. Шаг 1 реализует базы данных отношений с базой данных .createrelation метод
  2. Шаг 2 удаляются все созданные отношения с командой database.delete

Как сказал Тони, 30 столов не так уж много, и ОПЗ ipt следует легко установить. После того как этот набор остановит процесс после шага 1, запустите документ-документ доступа (инструменты \ анализ \ документ), чтобы подготовить вашу документацию, шаг 2. Шаг 2. После этого ваша база данных останется без изменений и ваша документация будет готова.

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

+1

Собственно, что вы можете сделать, это создать отношения. Затем используйте следующую утилиту, которая сравнивает две базы данных и создает код VBA для обновления одной базы данных до другой. Я использую это все время. Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEMscreens/CompareEM-About.htm –

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