Baza danych w bazie danych (projekt tabeli) [duplikat]

Możliwy duplikat:
Projekt bazy danych do tworzenia tabel w locie

Mam potrzebę utworzenia bazy danych w bazie danych. To pytanie dotyczyto. Spróbuję wyjaśnić, co próbuję zrobić szczegółowo i podać przykłady w kodzie. w zasadzie chcę tworzyć dynamiczne tabele w bazie danych. Na przykład będę mieć stronę internetową, która pozwala użytkownikom tworzyć własne tabele z kolumnami i danymi. Oto projekt bazy danych, który wymyśliłem:

aColumn
aDataType
aRow
aTable
zBit
zDateTime
zMoney
zNumber
zText

Tabele zaczynające się od az są danymi, do których przechodzą określone dane, takimi jak ints, wartości datetime itp. aColumn to kolumny należące do określonej tabeli. aRow identyfikuje konkretny wiersz w tabeli. Oto projekt bazy danych:

aTable: Id, name
aColumn: Id, Name, aTable, aDataType
aDataType: Id, Name
aRow: Id, aTable
zBit: Id, aRow, aColumn, Data(Bit)
zDateTime: Id, aRow, aColumn, Data (DateTime)
zMoney: Id, aRow, aColumn, Data (Money)
zNumber: Id, aRow, aColumn, Data (INT)
zText: Id, aRow, aColumn, Data (nvarchar(MAX))

Oto kilka przykładowych danych, których użyłem do uruchomienia i uruchomienia:

stół

Id          Name
1           Users

aKolumny

Id          Name           aTable       aDataType
1           Name           1            2
2           UserId         1            1
3           Occupation     1            2

aDataType

Id          Name
1           Number
2           Text

wiersz

Id          aTable
1           1
2           1

numer

Id          aRow           aColumn      Data
1           1              1            1245
2           2              2            56

tekst

Id          aRow           aColumn      Data
1           1              1            Sara
2           2              1            Jake

Wszystkie pozostałe tabele z * są puste

Oto zapytanie o utworzenie dynamicznej tabeli:

select t.[Id] as [Table], c.Name as [Column], dt.Name as [DataType], r.[Id] as [Row], cast(v.Data as nvarchar(MAX)) as Data from [pod].[dbo].[aTable] t
INNER JOIN [pod].[dbo].[aColumn] c on t.Id = c.[aTable]
INNER JOIN [pod].[dbo].[aDataType] dt on c.[aDataType] = dt.Id
INNER JOIN [pod].[dbo].[aRow] r on t.[Id] = r.[aTable]
INNER JOIN [pod].[dbo].[zBit] v on c.[Id] = v.aColumn and r.[Id] = v.[aRow]
UNION ALL
select t.[Id] as [Table], c.Name as [Column], dt.Name as [DataType], r.[Id] as [Row], cast(v.Data as nvarchar(MAX)) as Data from [pod].[dbo].[aTable] t
INNER JOIN [pod].[dbo].[aColumn] c on t.Id = c.[aTable]
INNER JOIN [pod].[dbo].[aDataType] dt on c.[aDataType] = dt.Id
INNER JOIN [pod].[dbo].[aRow] r on t.[Id] = r.[aTable]
INNER JOIN [pod].[dbo].[zDateTime] v on c.[Id] = v.aColumn and r.[Id] = v.[aRow]
UNION ALL
select t.[Id] as [Table], c.Name as [Column], dt.Name as [DataType], r.[Id] as [Row], cast(v.Data as nvarchar(MAX)) as Data from [pod].[dbo].[aTable] t
INNER JOIN [pod].[dbo].[aColumn] c on t.Id = c.[aTable]
INNER JOIN [pod].[dbo].[aDataType] dt on c.[aDataType] = dt.Id
INNER JOIN [pod].[dbo].[aRow] r on t.[Id] = r.[aTable]
INNER JOIN [pod].[dbo].[zMoney] v on c.[Id] = v.aColumn and r.[Id] = v.[aRow]
UNION ALL
select t.[Id] as [Table], c.Name as [Column], dt.Name as [DataType], r.[Id] as [Row], cast(v.Data as nvarchar(MAX)) as Data from [pod].[dbo].[aTable] t
INNER JOIN [pod].[dbo].[aColumn] c on t.Id = c.[aTable]
INNER JOIN [pod].[dbo].[aDataType] dt on c.[aDataType] = dt.Id
INNER JOIN [pod].[dbo].[aRow] r on t.[Id] = r.[aTable]
INNER JOIN [pod].[dbo].[zMoney] v on c.[Id] = v.aColumn and r.[Id] = v.[aRow]
UNION ALL
select t.[Id] as [Table], c.Name as [Column], dt.Name as [DataType], r.[Id] as [Row], cast(v.Data as nvarchar(MAX)) as Data from [pod].[dbo].[aTable] t
INNER JOIN [pod].[dbo].[aColumn] c on t.Id = c.[aTable]
INNER JOIN [pod].[dbo].[aDataType] dt on c.[aDataType] = dt.Id
INNER JOIN [pod].[dbo].[aRow] r on t.[Id] = r.[aTable]
INNER JOIN [pod].[dbo].[zNumber] v on c.[Id] = v.aColumn and r.[Id] = v.[aRow]
UNION ALL
select t.[Id] as [Table], c.Name as [Column], dt.Name as [DataType], r.[Id] as [Row], cast(v.Data as nvarchar(MAX)) as Data from [pod].[dbo].[aTable] t
INNER JOIN [pod].[dbo].[aColumn] c on t.Id = c.[aTable]
INNER JOIN [pod].[dbo].[aDataType] dt on c.[aDataType] = dt.Id
INNER JOIN [pod].[dbo].[aRow] r on t.[Id] = r.[aTable]
INNER JOIN [pod].[dbo].[zText] v on c.[Id] = v.aColumn and r.[Id] = v.[aRow]

Oto jeden fragment tego zapytania:

select t.[Id] as [Table], c.Name as [Column], dt.Name as [DataType], r.[Id] as [Row], cast(v.Data as nvarchar(MAX)) as Data from [pod].[dbo].[aTable] t
INNER JOIN [pod].[dbo].[aColumn] c on t.Id = c.[aTable]
INNER JOIN [pod].[dbo].[aDataType] dt on c.[aDataType] = dt.Id
INNER JOIN [pod].[dbo].[aRow] r on t.[Id] = r.[aTable]
INNER JOIN [pod].[dbo].[zText] v on c.[Id] = v.aColumn and r.[Id] = v.[aRow]

Jak widać tutaj fragment danych (tabele z *) jest identyfikowany przez wiersz i kolumnę. Po uruchomieniu tego zapytania otrzymuję to:

Wyniki

Table       Column         DataType     Row           Data
1           UserId         Number       1             1245          
1           UserId         Number       2             56
1           Name           Text         1             Sara
1           Name           Text         2             Jake

Oto moje pożądane wyniki: (Nie jestem pewien, jak zamienić te wiersze w kolumny, jeśli kolumny sąnieznany)

Row         UserId       Name
1           1245         Sara
2           56           Jake

Wielki problem Ta tabela ma przypominać 3 kolumny?

aKolumny

Id          Name           aTable       aDataType
1           Name           1            2
2           UserId         1            1
3           Occupation     1            2

Tak więc moje ostateczne oczekiwane wyniki to:

Row         UserId       Name         Occupation
1           1245         Sara         NULL
2           56           Jake         NULL

W wynikach muszę również posortować kolumny. Czy to możliwe. Jakie bazy danych obsługują tego rodzaju funkcjonalność. Jestem otwarty na każdą bazę danych, która może to zrobić.

questionAnswers(2)

yourAnswerToTheQuestion