একাধিক কলামে স্কেলচেমি অনন্য


174

ধরা যাক যে আমার কাছে একটি শ্রেণি রয়েছে যা অবস্থানগুলি উপস্থাপন করে। অবস্থানগুলি গ্রাহকদের "নিজস্ব"। অবস্থানগুলি একটি ইউনিকোড 10 অক্ষর কোড দ্বারা চিহ্নিত করা হয়। "অবস্থান কোড" নির্দিষ্ট গ্রাহকের জন্য অবস্থানগুলির মধ্যে স্বতন্ত্র হওয়া উচিত।

The two below fields in combination should be unique
customer_id = Column(Integer,ForeignKey('customers.customer_id')
location_code = Column(Unicode(10))

সুতরাং আমার যদি দুটি গ্রাহক থাকে, গ্রাহক "123" এবং গ্রাহক "456"। তাদের উভয়েরই "প্রধান" নামক অবস্থান থাকতে পারে তবে দু'জনেরই প্রধান নামে দুটি অবস্থান থাকতে পারে না।

আমি এটি ব্যবসায়ের যুক্তিগুলিতে পরিচালনা করতে পারি তবে আমি নিশ্চিত করতে চাই যে স্ক্যাল্কমিতে প্রয়োজনীয়তা যুক্ত করার কোনও উপায় নেই। অনন্য = সত্য বিকল্পটি কেবল নির্দিষ্ট ক্ষেত্রের সাথে প্রয়োগ করার সময় কাজ করে বলে মনে হয় এবং এটি পুরো টেবিলের জন্য সমস্ত অবস্থানের জন্য কেবল একটি অনন্য কোড তৈরি করে।

উত্তর:


298

এর ডকুমেন্টেশন থেকে এক্সট্রাক্ট করুন Column:

অনন্য - যখন এটা ঠিক যে, ইঙ্গিত করে যে এই কলামটি একটি অনন্য বাধ্যতা রয়েছে, অথবা যদি সূচক পাশাপাশি সত্য, ইঙ্গিত করে যে সূচক অনন্য পতাকা দিয়ে তৈরি করা উচিত। সীমাবদ্ধতা / সূচকে একাধিক কলাম নির্দিষ্ট করতে বা স্পষ্ট নাম নির্দিষ্ট করতে, স্বতন্ত্রভাবে ইউনিককন্ট্রেন্ট বা সূচী কাঠামো ব্যবহার করুন ।

এগুলি কোনও টেবিলের অন্তর্ভুক্ত এবং কোনও ম্যাপ করা শ্রেণীর নয়, সারণির সংজ্ঞা অনুসারে একটি ঘোষণা করে, বা যদি বিবৃতি ব্যবহার করে যেমন __table_args__:

# version1: table definition
mytable = Table('mytable', meta,
    # ...
    Column('customer_id', Integer, ForeignKey('customers.customer_id')),
    Column('location_code', Unicode(10)),

    UniqueConstraint('customer_id', 'location_code', name='uix_1')
    )
# or the index, which will ensure uniqueness as well
Index('myindex', mytable.c.customer_id, mytable.c.location_code, unique=True)


# version2: declarative
class Location(Base):
    __tablename__ = 'locations'
    id = Column(Integer, primary_key = True)
    customer_id = Column(Integer, ForeignKey('customers.customer_id'), nullable=False)
    location_code = Column(Unicode(10), nullable=False)
    __table_args__ = (UniqueConstraint('customer_id', 'location_code', name='_customer_location_uc'),
                     )

আমিও একই সমস্যার মুখোমুখি, তবে ইউনিককন্ট্রেন্ট ব্যবহার করা আমার পক্ষে কোনও উপকারে আসেনি। আমি সূচক ('...') দিয়ে চেষ্টা করার পরে আমি একটি অনন্য সীমাবদ্ধতা পাই। এই আচরণের কোনও ব্যাখ্যা আছে কি?
swdev

1
@ এসডবদেব: আপনি কোন আরডিবিএমএস ব্যবহার করেন?
ভ্যান

3
ধন্যবাদ, তবে আমার প্রশ্নটি ছিল: আপনি ডিবি স্কিমা তৈরি করতে এসএ (এবং ফ্লাস্ক) ব্যবহার করেছেন, বা আলাদাভাবে তৈরি করেছেন?
ভ্যান

1
কেন .সি। ব্যবহার করেন নি?
স্মাইলি

1
@ স্মাইলি .c.একটি শর্টকাট.columns.
ভ্যান

7
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class Location(Base):
      __table_args__ = (
        # this can be db.PrimaryKeyConstraint if you want it to be a primary key
        db.UniqueConstraint('customer_id', 'location_code'))
      customer_id = Column(Integer,ForeignKey('customers.customer_id')
      location_code = Column(Unicode(10))

1
অবশ্যই হতে হবে __table_args__ = (db.UniqueConstraint('customer_id', 'location_code'),), শেষে কমাটি ভুলে যাবেন না।
বার্টডিডা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.