जैसे ही उपयोगकर्ता परिभाषित होता है, यह कभी भी कॉलम (फ़ील्ड) नहीं होता है, यह डेटाबेस में हमेशा एक पंक्ति (इकाई) होता है - उपयोगकर्ता आपकी डेटा संरचना को परिभाषित नहीं करते हैं।
यहां दो विचार हैं। (1) अधिक मूर्खतापूर्ण "रेल मार्ग" है। (2) कुछ हद तक कम जटिल है, लेकिन आपको अपने विशिष्ट डीबीएमएस से जोड़ सकता है।
(1) चार मॉडल का उपयोग करना: Posts
(एन: 1) PostTypes
(1: एन) PostFields
(1: एन) PostValues
(एन: 1 Posts
):
create_table :post_types do |t|
t.string :name
t.text :description
....
end
create_table :post_fields do |t|
t.references :post_type
t.string :name
t.integer :type
t.boolean :required
....
end
create_table :posts do |t|
t.references :post_type
(... common fields for all posts, like user or timestamp)
end
create_table :post_values do |t|
t.references :post
t.references :post_field
t.string :value
....
end
केवल समस्या यह है कि आप ' , boolean_post_values: डेटाबेस में मूल्यों के लिए एक ही प्रकार के लिए सीमित कर रहे हैं, आप एक बहुरूपी संघ कर सकता है और के लिए अलग अलग मॉडल बनाने float_post_values आदि
एक अन्य समाधान के लिए हो सकता है एक जेसन-आधारित डेटा संरचना का उपयोग करें, i। ई। एक ही जैसा कि ऊपर है, लेकिन PostValues
के बजाय सिर्फ Posts
में से एक क्षेत्र में सहेजने के लिए:
create_table :posts do |t| t.references :post_type t.json :data ... end // ... no table :post_values
यह शायद आसान है, लेकिन json एक postgres विशेष डेटाप्रकार है (हालांकि आप स्ट्रिंग इस्तेमाल कर सकते हैं और खुद को डी/एन्कोडिंग करें)।
स्रोत
2016-09-20 10:18:59