मुझे पुराने डेटाबेस से डेटा को नए रूप में आयात करना होगा, जिसमें थोड़ी अलग संरचना होगी। उदाहरण के लिए, पुराने डेटाबेस में, एक टेबल रिकॉर्डिंग कर्मचारी और उनके पर्यवेक्षक हैं:
CREATE TABLE employee (ident TEXT PRIMARY KEY, name TEXT, supervisor_name TEXT)
अब, नया डेटाबेस इस प्रकार है:
CREATE TABLE person (id BIGSERIAL PRIMARY KEY, name TEXT, old_ident TEXT);
CREATE TABLE team (id BIGSERIAL PRIMARY KEY);
CREATE TABLE teammember (person_id BIGINT, team_id BIGINT, role CHAR(1));
यही है, अपने पर्यवेक्षकों के नामों के साथ कर्मचारियों की सादे तालिका के बजाय, नया (अधिक सामान्य) डेटाबेस लोगों की टीम बनाने में सक्षम बनाता है। कर्मचारी भूमिका के साथ सदस्य हैं 'e'
, भूमिका के साथ पर्यवेक्षक हैं 's'
।
सवाल यह है कि employee
नई संरचना से डेटा को आसानी से कैसे स्थानांतरित किया जाए , प्रति कर्मचारी-पर्यवेक्षक जोड़ी एक टीम। उदाहरण के लिए, कर्मचारी
employee: ('abc01', 'John', 'Dave'), ('abc02', 'Kyle', 'Emily')
के रूप में माइग्रेट किया जाना है
person: (1, 'John', 'abc01'), (2, 'Dave', NULL), (3, 'Kyle', 'abc02'), (4, 'Emily', NULL)
team: (1), (2)
teammember: (1, 1, 'e'), (2, 1, 's'), (3, 2, 'e'), (4, 2, 's')
मैं एक डेटा-संशोधित सीटीई का उपयोग करने पर विचार करूंगा, पहले कर्मचारियों और पर्यवेक्षकों को सम्मिलित करूंगा, उसके बाद टीमों को। हालाँकि, CTE केवल सम्मिलित तालिका पंक्ति से डेटा वापस कर सकता है। इस प्रकार, मैं यह देखने में सक्षम नहीं हूं कि कौन पर्यवेक्षक कौन था।
एकमात्र समाधान जो मैं देख रहा हूं वह उपयोग कर रहा है plpgsql
, जो केवल डेटा पर पुनरावृति करेगा, सम्मिलित टीम आईडी को एक अस्थायी चर में रखेगा, और फिर उपयुक्त teammember
पंक्तियों को सम्मिलित करेगा । लेकिन मैं उत्सुक हूं कि क्या सरल या अधिक सुरुचिपूर्ण समाधान हैं।
कई हजारों कर्मचारियों के लिए मोटे तौर पर कई सैकड़ों होंगे। हालांकि यह आम तौर पर एक अच्छा अभ्यास है, मेरे मामले में, मैं पुराने के आधार पर नई आईडी उत्पन्न नहीं करना चाहूंगा, क्योंकि पुरानी आईडी की तरह तार हैं *.GM2
। मैं उन्हें old_ident
संदर्भ के लिए कॉलम में संग्रहीत करता हूं ।
team
, जो उस व्यक्ति की आईडी धारण करेगा जिसके लिए टीम बनाई गई थी वह समस्या का समाधान करेगा। मैं अभी भी उत्सुक हूं कि क्या अधिक सुरुचिपूर्ण (यानी, डीडीएल का उपयोग नहीं) समाधान है, हालांकि।