Я хочу разделить разработку нашего решения хранилища данных на управляемые проекты Visual Studio, которые можно редактировать независимо и расти органично. Я разработал проект, который содержит все соответствующие размеры, такие как Date в одном решении. Могу ли я ссылаться на свое измерение Date из другого решения, где мне нужно включить внешний ключ? Я попытался ссылаться на dacpac, содержащий согласованное измерение, но это не работает должным образом.SQL-внешний ключ между проектами в разных решениях VS
ответ
Короче говоря, вы не можете создать FK, ссылающийся на таблицу в другой базе данных, обе таблицы должны быть расположены в одной базе данных. FK - объект базы данных, а не объект сервера.
Вы можете использовать триггеры для управления FK, что, конечно же, не лучшее решение.
Ограничения FOREIGN KEY могут ссылаться только на таблицы в одной базе данных на одном сервере. Перекрестная база данных должна быть реализована через триггеры. Для получения дополнительной информации см. CREATE TRIGGER (Transact-SQL).
https://msdn.microsoft.com/en-us/library/ms189049.aspx
Основываясь на ваш комментарий (см ниже), вот некоторые мысли:
У вас есть несколько хороших аргументов. Хотя я искал способ, которым мы могли бы моделировать несколько бизнес-процессов параллельно, это не вариант. Похоже, что единственным вариантом может быть один большой проект, а затем обрабатывать как управлять более чем один разработчик, работающий в растворе, в то же время - благодаря
- Одна база данных = один проект
- Принудительно связи между членами команды
- Обновите свою политику VCS, чтобы свести к минимуму проблемы
- Обучать член команды о возможных проблемах и их обходные
-
- Включая вариант развертывания
- Обеспечить достаточные ресурсы (в том числе Девых рабочих станций) и использовать локальные экземпляры для разработки
- Построения среды SIT (интеграция), где вы можете проверить изменения и как они ведут себя во время развертывания.
- Создайте общую среду DEV, которая используется для объединения работы членов вашей команды.
- Commit/push файлы в CVS, которые считаются выполненными. Commit/push регулярно
- Маршрутные задачи для минимизации конфликтов (если член команды имеет какое-то отношение к объекту A, попробуйте направлять все задачи, связанные с объектом A, этому разработчику или отложить второе изменение до тех пор, пока не будет выполнено первое)
- Если вы используете dacpac для развертывания, включите файл конфигурации (протестированный в SIT env) рядом с файлом dacpac. (SIT должен отражать производственную среду при тестировании развертывания)
И снова: Обеспечить связь внутри и снаружи команды. Это ключ.
В прошлом я справлялся с этими ситуациями, используя отдельные проекты в одном решении. Понятно, что главная цель - избежать конфликтов слияния между разработчиками, причем такая компоновка единственное место, которое это должно произойти, находится в файле решения, что должно быть довольно редко.
Есть несколько вещей, чтобы быть осторожным здесь:
- Ссылка должна быть типа «Тот же базы данных»
- Ссылка должна быть в направлении Факт -> Dimension
- При развертывании проекта «Факт» вы должны обязательно указать опцию «Включение составных объектов». Это значение по умолчанию в Visual Studio.
- Циркулярные ссылки не допускаются. Если у вас есть обходной путь (очень кратко, google для большего), это создать «родительский» проект со ссылками на обе стороны «круга».
Это также возможно создать внешний ключ для ссылочного dacpac, а не проекта базы данных. Опять ссылка должна быть в направлении Факт -> Измерение. Вам также нужно будет подумать над процессом сборки, так как в действительности вы принимаете двоичную зависимость от от «dacpac» Dimensions. Вы также можете добавить dacpac в проект ссылки (я, как правило, создаю папку для них), поэтому он попадает туда же в исходное управление).
В случае это помогает, я создал решение, которое демонстрирует оба метода и разделяю его здесь: https://github.com/arapaima-uk/FKsToReferencedDacpacs
- 1. msbuild в разных решениях
- 2. Угловые интерфейсные и C# -конвертеры в разных решениях VS
- 3. Как я могу использовать XAML UserControls между VS-проектами?
- 4. Репозитории Git на решениях VS вместо проектов
- 5. Обмен константами между проектами
- 6. Обмен активами между проектами
- 7. Как разделить код между проектами разных типов в visual studio?
- 8. Доля кода между проектами в tfs 2010
- 9. Зависимость Инъекция между проектами
- 10. Могу ли я использовать разные стили скобок в разных проектах/решениях VS2008?
- 11. пользовательский элемент управления, который будет использоваться в нескольких приложениях, находящихся в разных решениях VS
- 12. Управление проектами: SharePoint vs activeCollab
- 13. Доля экземпляра между несколькими проектами
- 14. Синхронизация объекта между двумя проектами на разных устройствах по сети
- 15. Qt зависимости между проектами
- 16. Ссылка между проектами
- 17. C++ заголовки между проектами
- 18. Sharing customTags.tld между проектами
- 19. Доля переменных между проектами
- 20. Обмен ресурсами между проектами
- 21. Тип конфликтов между проектами
- 22. CPD/PMD между проектами?
- 23. Наследование зависимостей между проектами
- 24. Гит между несколькими проектами
- 25. Ссылки между двумя проектами
- 26. Resx обмен между проектами
- 27. Share codebase между проектами
- 28. Совместное использование DLL между проектами
- 29. Зависимости между проектами в IAR
- 30. Связь между проектами в XCode
Я знаю, что вы не можете создать FK между базами данными. В этом случае каждый проект VS содержит подмножество таблиц для одной и той же базы данных назначения. Короче говоря, проекты развертываются в одной базе данных. –
Вы уверены, что это хорошая идея? Файл манифеста будет содержать только подмножество таблиц и практически невозможно выполнить некоторые действия. Кроме того, файлы dacpac считаются базой данных, когда вы пытаетесь ссылаться на нее в VS, это не позволит вам создать FK. Вам действительно нужно создавать несколько независимых решений? Вы можете организовать свои объекты в VS, используя папки. (И да, я знаю, что у DWH много объектов) – Pred
У вас есть несколько хороших аргументов. Хотя я искал способ, которым мы могли бы моделировать несколько бизнес-процессов параллельно, это не вариант. Кажется, что единственным вариантом может быть один крупный проект, а затем обработать, как управлять более чем одним разработчиком, работающим в решении, в то же время - спасибо –