2012-04-05 15 views
0

Ich frage mich, wie ich dieses Problem angehen kann.SQL Server-Tabelle mit dynamischen Spalten?

Wir haben eine Profiltabelle in unserer Datenbank, die von einem Prozess bevölkert werden, die ein hochgeladenes Excel-Dokument liest und Dumps dann die Spalten und die Daten in ihren Reihen in die Benutzer-Profile (das einzige, was gemeinsam zwischen allen solchen Excel-Tabellen sind eine E-Mail-Adresse).

Dementsprechend können wir nicht wirklich vorhersagen, wie das Profil eines bestimmten Benutzers aussehen wird. Wie erstelle ich meine Profiltabelle (n)?

Antwort

1

Sorry, ich habe eine andere Antwort zu erstellen, aber Kommentar wird nicht lassen Sie mich die ascii Skizze erstellen

---------- 
| user | 
---------- 
| id pk| 
| name | 
| ..... | 
---------- 

---------------- 
| preference | 
---------------- 
| user_id fk | <-- reference user.id 
| header  | 
| value  | 
---------------- 

csv_row = 1,churk,height,11,weight,500lb,width,22,... OR csv_row = 1,churk,height=11,wieght=500lb,width=22......

diese Zeile 1 in Benutzertabelle ergeben wird, user.id = 1, user.name = Churk mindestens 3 Reihen s bevorzugt. {[1, Höhe, 11], [1, Gewicht, 500lb], [1, Breite, 22]}

Also, wenn Sie den DB-Abfrage, alles, was Sie brauchen, ist

SELECT * FROM user JOIN preference on preference.user_id = user.id WHERE user.name = 'Churk'; 
+0

Danke Chuck! Das macht Sinn für mich. Ich werde es versuchen... –

0

Wie werden diese Daten später abgefragt? So sehr ich die Praxis hasse, könnte dies ein Fall sein, in dem CSV-Daten in einer Spalte gespeichert werden müssen.

Update:
Dies könnte eine gute Passform für ein Entity Attribute Value Schema sein. Ich bin auch nicht wirklich ein Fan von EAV, aber zumindest ist es weniger böse als CSV-Daten in einer Kolumne.

+0

Dank Joel. Die Profile werden unter Verwendung eines globalen Sucheingabefelds nach Attributen ihrer Profile durchsucht, wie zum Beispiel beim Tragen einer Brille oder Ethnizität oder was auch immer. Ich bin nicht damit vertraut, CSV-Daten in einer einzelnen Spalte zu speichern ... es klingt, als würden wir unsere Fähigkeit verlieren, Personen anhand eindeutiger Attribute zu suchen oder zu kategorisieren. –

+0

Die Daten klingen ein bisschen wie Tags, vielleicht? Wenn jeder Benutzer eine Benutzer-ID hat, können Sie ihre Tabellendaten laden und jede Information gegen die entsprechende Benutzer-ID speichern. –

+0

In diesem Fall vielleicht ein [Entity Attribut Value] (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) Schema? –

1

Wenn Sie diese Daten mit einer Programmiersprache verarbeiten müssen und nicht blenden, wenn Sie Mappings durchführen, sollte das ziemlich einfach sein.

User_table mit einer ID, und einige Fix-Informationen wie Name und was nicht.

Dann haben Sie eine Profiltabelle, die ein user_id Fremdschlüssel hat, und ein Schlüsselpaar Wert, Kopf-/Wert

+0

Hi Chuck, ja, das ist das Setup, das ich gerade habe. Was ich nicht verstehe, ist, wie man die unvorhersehbaren Spaltentypen in der Excel-Tabelle beim Dumping in meiner Profiltabelle berücksichtigt. Ich vermute, das hat etwas mit den von Ihnen erwähnten Schlüssel/Wert-Paaren zu tun (Header/Wert)? Kannst du etwas näher erläutern oder eine ASCII-Skizze erstellen/auf einen Link verweisen? Danke noch einmal. –