Я работаю над универсальным приложением, которое использует набор предварительно выбранных таблиц базы данных (и их взаимосвязей) для создания пользовательского интерфейса для управления данными в этих таблицах.По сути, я просто ищу вещи из информационной схемы, получаю все первичные и внешние ключи и генерирую поля ввода и ссылки на другие диалоги на основе этого.Поскольку это должно быть универсальное решение, оно должно работать с любым набором таблиц, которые имеют значимые отношения друг с другом.
Одна из вещей, с которыми я столкнулся, это внешние ключи, в частности - СОСТАВИТЬ внешние ключи с одним ограничением.Например, если у меня есть следующие таблицы:
Компания
CompanyID, CompanyName, CompanyID
--companyID is the primary key which identifies the company.
Отдел
DivisionID, CompanyID, DivisionName, DivisionID+CompanyID
--DivisionID+CompanyID is a composite primary key for a division, because it's a one-to-many relationship and division is DEPENDENT on Company.
Team
TeamID, DivisionID, CompanyID, TeamName, TeamID+DivisionID+CompanyID
--same as above - a Team is dependent on Division, which has a composite primary key.
Теперь эта модель базы данных - по всем определениям - является допустимой моделью (и SQL Server позволяет это) - но я столкнулся с определенной проблемой.
Например, в информационной схеме DivisionID и CompanyID «назначены» одному и тому же CONSTRAINT.Поэтому, когда я присоединяюсь к правильным таблицам, у меня возникает проблема.Там нет никакого способа узнать, какой столбец в одной таблице является какой столбец в другой.В приведенном выше примере имена столбцов совпадают (CompanyID - это имя каждого столбца, который относится к идентификатору компании - будь то в таблице COMPANY или в таблице TEAM и т. Д.), Но нет правила, чтоговорит, что имя столбцов должно быть одинаковым, поэтому я не знаю, как заставить программу узнать, какой столбец какой.
TABLE1 COLUMN1 CONSTRAINT TABLE2 COLUMN2
TEAM CompID TEAM_HAS_DIVISION DIVISION CompanyID
TEAM DivID TEAM_HAS_DIVISION DIVISION DivisionID
Есть ли у компьютера способ узнать этот CompID?в таблице КОМАНДА ссылается на CompanyID, а не на DivisionID в таблице DIVISION?
Я не смог найти никакого способа сделать это из данных в представлениях INFORMATION_SCHEMA.
Да, человек может легко понять, что CompID = CompanyID и т. Д. ... но, как я упоминал ранее - я пытаюсь найти общее решение, которое бы не требовало, чтобы человек на это смотрел ипринимать решения и ошибки: =)