2015-12-23 5 views
0

У меня есть проект базы данных «Core» VS, который включает в себя таблицу с именем [dbo]. [MyTable] с несколькими столбцами на ней. Я повторно использую этот проект в ряде решений, в которых я также включаю проект базы данных по конкретным приложениям, который ссылается на основной проект базы данных, и добавляет больше таблиц и FK из этих таблиц в таблицы основного проекта.Проект базы данных Sql, который расширяет существующую таблицу

Возможно ли использовать «построенные на» таблицы, определенные в проекте ядра db, то есть добавить больше столбцов в существующую таблицу, чтобы эти столбцы были определены только для одного проекта db для конкретного приложения, а не для любого из другие, которые повторно используют один и тот же проект ядра db?

Редактировать: Я только что нашел тот же вопрос, опубликованный более 6 лет назад. Видимо, тогда ответ был «нет», но, возможно, это возможно в более новых версиях VS?

https://social.msdn.microsoft.com/Forums/en-US/3583a5ea-d653-4268-a1d0-f58788c0cebf/partial-project-add-extra-column-to-table?forum=vstsdb

+0

Собственно, это * все еще * неправильный вопрос. Вы смешиваете ER-концепции, такие как наследование с реляционными концепциями - это разные вещи. Проект базы данных представляет собой * реляционную * модель, а не ER. ER имеет наследование, реальные типы и отношения с атрибутами. Они преобразуются * в реляционную модель. Проект базы данных в Visual Studio (или любой другой инструмент БД) не является моделью ER базы данных, это конечный результат. –

+0

Я не уверен, что вы пытаетесь сказать - что вы предлагаете мне делать? –

+1

Либо используйте инструмент моделирования ER, который предлагает наследование и * отображение его * реляционной модели, или создайте таблицы вручную. То, что вы просите, просто не имеет значения для проекта базы данных. –

ответ

0

Это слишком долго для комментария.

Если я правильно понял ваш вопрос, вы ищете что-то вроде наследования таблицы. Это поддерживается Postgres (см. Документацию here). И это похоже на то, что вы описываете.

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

+0

Привет, я не ищу поддержку наследования таблиц в SQL Server, я ищу поддержку наследования во время разработки в проектах Visual Studio Database, выход которой будет просто обычной таблицей, но с столбцами, определенными в базовый проект плюс столбцы, добавленные к нему в проекте, специфичном для приложения –

+0

Привет, еще раз, не могли бы вы также объяснить, как вы настраиваете, используя тот же кластерный индекс для дополнительных столбцов в таблице «расширение», пожалуйста? –

+0

@SimonGreen вы задаете неправильный вопрос и смешиваете реляционные и ER-концепции. ER имеет наследование, но оно получает * сопоставление * с конечными реляционными структурами различными способами (таблица для каждого типа, таблица на иерархию и т. Д.). Проект базы данных VS содержит реляционные конструкции, а не модель ER. –

1

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

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

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

+0

Да, это то, что мы решили сделать - в основном, я думаю, что ответ на мой вопрос заключается в том, что (по-прежнему) невозможно расширить таблицы в проектах БД, которые ссылаются на другие проекты БД. Таким образом, доступны только доступные варианты либо через сценарий после развертывания, либо определить таблицу расширений с сопоставлением 1: 1 в основной таблице (и, возможно, взаимодействовать через представление, которое объединяет 2) –