Как посчитать используемые и свободные лицензии из 4 таблиц в SQL? - PullRequest
0 голосов
/ 04 февраля 2012

У меня есть 4 таблицы, в которых хранится информация о наших лицензиях. У нас есть собственные установочные пакеты для установки приложений, поэтому PackageName ссылается на это имя установочных пакетов. Возможно, что у нас один и тот же пакет 3 раза, единственное различие между ними состоит в том, что первый - английский, второй - немецкий, а третий - мультиязычный

Таблицы:

Лицензии. В этой таблице содержится информация о том, сколько лицензий мы купили для приложения.

LicenseID int<br> PackageName nvarchar(50)<br> DisplayName nvarchar(200)<br> Bought int

Регистрация: эта таблица содержит информацию о том, какое приложение (только те, для которых требуется лицензия) установлено на каком хосте
LicenseID int<br> Host nvarchar(50)

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

Замены: в этой таблице есть только информация о том, какой из них LicenseID может заменить какой. Таким образом, я имею в виду, что если Office 2010 имеет LicenseID 1, а Office 2007 имеет LicenseID 2, то в этой таблице останется 1, 2
LicenseID int<br> SubstitutedLicenseID

Четвертая таблица - «Ассоциации». В этой таблице содержится информация о том, какие пакеты принадлежат одной и той же лицензии. Это необходимо, потому что, если у нас есть два пакета с одной лицензией? Я имею в виду, что если у нас есть пакет для Symantec Antivirus 10 с немецким языком, а также у нас есть пакет для Symantec Antivirus 10 с английским языком, то мне нужно пакеты с тем же программным обеспечением, поэтому они должны использовать одну и ту же лицензию.
PackageName nvarchar(50)<br> LicenseID int

Таким образом, в этом случае эта таблица останется, если Symantec Antivirus имеет LicenseID 5:
Symnatec Antivirus 10 DE, 5<br> Symantec Antivirus 10 EN, 5<br> Symantec Antivirus 10 MU, 5

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

Спасибо!

1 Ответ

1 голос
/ 05 февраля 2012

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

create table License(ID int, Name varchar(200), Bought int)
create table Package(ID int, PkgName varchar(200), LicenseID int)

insert into License(ID,Name,Bought) values(1,'Office 2010',3)
insert into License(ID,Name,Bought) values(2,'Office 2007',2)
insert into License(ID,Name,Bought) values(3,'Office 2003',1)
insert into Substitute(ParentLicenseID, SubLicenseID) values(1,2)
insert into Substitute(ParentLicenseID, SubLicenseID) values(1,3)
insert into Substitute(ParentLicenseID, SubLicenseID) values(2,3)

select
    ParentLicenseID=l.ID,
    ParentLicenseName=l.Name,
    BoughtDirectly=coalesce(l.Bought,0),
    BoughtIndirectly=sum(coalesce(l2.Bought,0)),
    TotalBought=coalesce(l.Bought,0)+sum(coalesce(l2.Bought,0))
from
    License l
    left outer join Substitute s on s.SubLicenseID = l.ID
    left outer join License l2 on l2.ID = s.ParentLicenseID
group by
    l.ID,
    l.Name,
    l.Bought

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...