मैं एसक्यूएल में जंगली हूं और SQL Alchemy पर पूरी तरह से नया हूं, लेकिन एक आगामी प्रोजेक्ट है जो दोनों का उपयोग करता है। तो मैंने सोचा कि मैं आराम से कुछ लिखता हूं। एक हैंगओवर से पीड़ित मैंने अल्कोहल के स्तर को ट्रैक रखने के लिए कुछ लिखने का फैसला किया।मैं एसक्लाक्लेमी (ओआरएम) में 3 टेबलों पर कई से अधिक रिश्तों को कैसे मॉडल करूं?
मैं events
जहां users
भाग लेने और उपभोग drinks
है। वे मेरी तीन मूल सारणी हैं (एक सहायक तालिका guestlist
के साथ, उपयोगकर्ताओं और ईवेंट के बीच एम: एन संबंध के लिए।
पेय सूची पेय सभी घटनाओं सभी उपयोगकर्ताओं के हर समय (कुछ भी मैप करने के लिए कोई जरूरत नहीं) पर उपलब्ध है। उपयोगकर्ता समय-समय पर बनाए जाते हैं, इसलिए ईवेंट हैं। सभी उपयोगकर्ता सभी ईवेंट में शामिल हो सकते हैं, इसलिए मैं उन मानचित्रों को मानचित्रित करने के लिए guestlist
तालिका का उपयोग करता हूं।
अब प्रश्न के दिल में: मुझे ट्रैक रखने की आवश्यकता है कि किस समय उपयोगकर्ता उपभोग करता है जो किस घटना पर पीता है। मैं इस श्वेत को अन्य तालिका shots
(नीचे देखें) को हल करने का प्रयास करता हूं लेकिन मुझे यकीन नहीं है कि यह एक अच्छा समाधान है या नहीं।
ERP Diagram http://s1.anyimg.com/img/g6ld1ku/Bildschirmfoto.png
SQL Alchemy में यह इस तरह कुछ हद तक लग सकता है (या नहीं, लेकिन यह है कि क्या मैं अब तक के साथ आया था) ::
guestlist_table = Table('guestlist', Base.metadata,
Column('event_id', Integer, ForeignKey('events.id')),
Column('user_id', Integer, ForeignKey('users.id'))
)
class Event(Base):
__tablename__ = 'events'
id = Column(Integer, primary_key=True)
name = Column(String(80), nullable=False)
started = Column(DateTime, nullable=False, index=True,
default=datetime.datetime.now
)
users = relationship("User", secondary=guestlist_table, backref="events")
# ...
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False, unique=True, index=True)
birthdate = Column(Date, nullable=False)
weight = Column(Integer, nullable=False)
sex = Column(Boolean, nullable=False)
# ...
class Drink(Base):
__tablename__ = 'drinks'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
volume = Column(Numeric(5,2), nullable=False)
percent = Column(Numeric(5,2), nullable=False)
# ...
class Shots(Base):
__tablename__ = 'shots'
id = Column(Integer, primary_key=True)
at = Column(DateTime, nullable=False,
default=datetime.datetime.now
)
user_id = Column(Integer, ForeignKey('users.id'), index=True)
event_id = Column(Integer, ForeignKey('events.id'), index=True)
drink_id = Column(Integer, ForeignKey('drinks.id'))
user = relationship("User", backref="shots")
event = relationship("Event", backref="shots")
drink = relationship("Drink", uselist=False) # one-to-one, no backref needed
मैं निर्माण करने के लिए एक अच्छा रास्ता खोजने के लिए संघर्ष एक तालिका घटनाओं, उपयोगकर्ताओं और पेय एक साथ नक्शे: मैं कैसे relationships तैयार करना चाहिए और कैसे मैंकरनायह?
बात यह है कि मुझे लगता है कि मैंने कुछ अनदेखा किया है। और स्पष्ट रूप से मैं क्वेरी पर कैसे खो गया हूं?
- मैं कम से कम सभी दृश्यों एक घटना पर भस्म प्राप्त करने की आवश्यकता (शायद उपयोगकर्ता के अनुसार क्रमबद्ध)
- मैं भी कभी कभी सभी दृश्यों की जरूरत है:
यहाँ प्रश्नों मैं समय के सबसे बनाना होगा रहे हैं
- घटना प्रति शॉट्स की संख्या
- यू प्रति शॉट्स की संख्या: एक विशिष्ट उपयोगकर्ता (शायद घटना के अनुसार क्रमबद्ध)
- और गिनती चालू की एक बहुत कुछ के लिए सेवा
- शॉट्स की संख्या एक उपयोगकर्ता एक घटना
पर गिरे हुए shots
तालिका इस प्रबंधन के लिए एक ठीक तरीका है?
हैलो @ ब्रूटस, मेरे विचार के अनुसार आपका रिश्ते 1 उपयोगकर्ता की तरह है, कई कार्यक्रमों में भाग ले सकता है और 1 ईवेंट में कई उपयोगकर्ता (अतिथिसूची) हैं। 1 घटना में कई पेय हैं और 1 पेय कई घटनाओं (पेय सूची) में सेवा कर सकते हैं। 1 उपयोगकर्ता कई पेय ले सकता है और 1 पेय कई उपयोगकर्ता (guestdrinklist) को सेवा दे सकता है। क्या ये सही है? – Nilesh
सभी पेय सभी कार्यक्रमों पर उपलब्ध हैं, इसलिए मैंने सोचा कि मुझे 'पेय सूची' की आवश्यकता नहीं है। जिसे आपने 'guestdrinklist' कहा था, मैंने 'शॉट्स क्लास 'में मॉडल करने की कोशिश की। कक्षा को दो टेबलों में विभाजित करना बेहतर होगा? – Brutus
यदि सभी पेय सभी घटनाओं पर उपलब्ध हैं तो पेय और घटनाओं के बीच संबंध निर्दिष्ट करने की आवश्यकता नहीं है।अगर आपके क्षेत्र का सबसेट अन्य इकाई से जुड़ा हुआ है तो आपको रिश्ते निर्दिष्ट करना होगा यदि कोई संबंध नहीं है तो कोई रिश्ते की आवश्यकता नहीं है। आप पेय और उपयोगकर्ता के बीच संबंध बना सकते हैं। – Nilesh