2015-10-19 7 views
5

का उपयोग कर बीजगणितीय डेटा प्रकारों का मॉडलिंग करना कहें कि आप ओकैमल/एफ #/एसएमएल/हास्केल में एक ऐप लिख रहे हैं और एक रिलेशनल डेटाबेस में डेटा जारी रखना चाहते हैं। संबंधों के लिए उत्पाद प्रकार (रिकॉर्ड और टुपल्स) को मैप करना आसान है, लेकिन आप संबंधों के प्रकारों को कैसे जोड़ते हैं?संबंधपरक डेटाबेस

ठोस होने के लिए, आप एक रिलेशनल डेटाबेस में निम्न प्रकार की तरह कैसे बने रहेंगे?

(* OCaml *) 
type t = 
    | Foo 
    | Bar of string 
    | Baz of int * int * int 
+0

क्या आप कृपया वास्तविक डेटा का उदाहरण दे सकते हैं जिसे आप स्टोर करना चाहते हैं? – Shnugo

+0

मेरा पहला विचार एक्सएमएल होगा। आप वर्णनात्मक मेटा डेटा (विशेषताओं) के साथ किसी भी प्रकार के हाइरेचिक रूप से संरचित डेटा को स्टोर कर सकते हैं। लेकिन आपको इसकी व्याख्या करने के लिए उच्च तर्क की आवश्यकता होगी ... – Shnugo

+0

@shnugo जैसा कि मैंने उल्लेख किया है कि मुझे संबंधपरक डेटाबेस में रूचि है। – Halst

उत्तर

2

यह थकाऊ लगता है लेकिन मैं योग में प्रत्येक उत्पाद के लिए एक टेबल तैयार करूंगा।

CREATE TABLE foo (id uuid PRIMARY KEY); 

CREATE TABLE bar (id uuid PRIMARY KEY, 
        s text NOT NULL); 

CREATE TABLE baz (id uuid PRIMARY KEY, 
        a integer NOT NULL, 
        b integer NOT NULL, 
        c integer NOT NULL); 

आप शायद प्रत्येक प्रकार के रिकॉर्ड के साथ साथ कुछ मेटाडेटा संग्रहीत करना चाहते हैं:

CREATE TABLE envelope (id uuid PRIMARY KEY, 
         t timestamptz NOT NULL DEFAULT now(), 
         by text NOT NULL DEFAULT sessions_user); 

और यह एक विदेशी कुंजी बाधा पता चलता है:

CREATE TABLE foo (id uuid PRIMARY KEY REFERENCES envelope); 

CREATE TABLE bar (id uuid PRIMARY KEY REFERENCES envelope, 
        s text NOT NULL); 

CREATE TABLE baz (id uuid PRIMARY KEY REFERENCES envelope, 
        a integer NOT NULL, 
        b integer NOT NULL, 
        c integer NOT NULL); 

और अगर आप भी आप कठोर हैं कॉलम को के साथ एक प्रकार का नाम और एक समग्र विदेशी कुंजी बनाने के लिए इसका उपयोग करके कल्पना कर सकता है। ( लेजर एसएमबी ब्लॉग में "Where Not to Use Table Inheritance" के तहत वर्णित है।)

+0

मैंने हाल ही में इसके बारे में अधिक सोचा है और एक विदेशी कुंजी लक्ष्य के रूप में सेवा करने के लिए एक मध्यवर्ती तालिका शामिल एक योजना है। कुछ उदाहरण कोड यहां पाए जा सकते हैं: https://github.com/solidsnack/pg-sql-variants – solidsnack

+0

मैं 't' के संदर्भ को कैसे संग्रहीत करूं? – nafg

+0

लिफाफे के लिए एक संदर्भ स्टोर करें। – solidsnack

संबंधित मुद्दे