2011-02-27 19 views
5

मेरे पास कुछ टेबल हैं जो सभी एक दूसरे से कई रिश्ते के साथ संदर्भित करते हैं लेकिन सामान्य प्रकार नहीं।एंटिटी फ्रेमवर्क प्राथमिक कुंजी के बिना कई रिश्तों के लिए कई

आमतौर पर कई से अधिक रिश्ते में एक टेबल शामिल होता है जो उनकी प्राथमिक कुंजी पर दो अन्य तालिकाओं में शामिल होता है।

मेरे मामले में मेरे पास कुछ टेबल हैं जो मिलान करने वाली विदेशी कुंजी साझा करके एक-दूसरे से संबंधित हैं।

मेरे पास दो तालिकाओं के साथ रोगी रिकॉर्ड हैं।

  1. डॉक्टर जो रोगी को सौंपा गया है।
  2. रोगी परीक्षण के परिणाम।

मुझे रोगी के बारे में कुछ भी मरीज के अलावा कुछ भी स्टोर करने की अनुमति नहीं है (और मेरे पास कोई कारण नहीं है) इसलिए रोगी की मेज में कोई बात नहीं है।

मैं डॉक्टरों को टेस्ट रिसेट्स से कैसे जोड़ सकता हूं?

दोनों के पास एक सारणी के लिए एक विदेशी कुंजी है जो अस्तित्व में नहीं है। यानी दोनों के पास रोगी रिकॉर्ड संख्याएं हैं लेकिन रोगी रिकॉर्ड संख्याओं की कोई तालिका नहीं है (रिकॉर्ड संख्या उन सिस्टम द्वारा उत्पन्न होती है जिनके पास मेरी पहुंच नहीं है)।

तो वास्तव में वे एक-दूसरे के साथ कई से अधिक रिश्तों में हैं।


मैंने रिकॉर्ड आईडी को पकड़ने के लिए टेबल बनाने के बारे में सोचा था। उस तालिका में एक कॉलम होगा जो प्राथमिक कुंजी है और कुछ भी नहीं।

वह समाधान मेरे लिए बिल्कुल काम नहीं करेगा।

  • मेरे भंडारण नास्तिक (पोको) पुस्तकालय जो प्रबंधन और इन रिकॉर्ड का विश्लेषण किया जाएगा यदि एक मरीज को अपने सिस्टम में था जब एक नया परीक्षा परिणाम जोड़ने की जाँच करने के कोई रास्ता नहीं होगा।
  • भले ही मैंने प्रबंधन पुस्तकालय में डेटाबेस संदर्भ पास किया हो। इसका मतलब यह होगा कि सिस्टम को हर बार एक डेटाबेस रिकॉर्ड करना होगा, यह देखने के लिए कि क्या रोगी के पास हमारे पिछले रिकॉर्ड थे या यदि यह पहला था। सभी एक टेबल में एक रिकॉर्ड जोड़ने के लिए जिसका कोई उद्देश्य नहीं था। शिखर प्रसंस्करण के समय के दौरान यह प्रति मिनट हजारों बार हो सकता है। कुछ ऐसा करना जो आपके लिए केवल क्लियर ऑब्जेक्ट्स तक पहुंचने के लिए तुच्छ होगा, लेकिन अगर आपको प्रत्येक के लिए डेटाबेस कॉल करने की ज़रूरत है तो पूरी तरह जबरदस्त है।

धन्यवाद!

+1

यह रिलेशनल डेटाबेस मॉडलिंग के नियमों को तोड़ता है तो यह बाहर से जोड़ने के लिए एक पुल की मेज के साथ समर्थित नहीं किया जाएगा रिकॉर्ड –

+0

मुझे पूरा यकीन है कि एक रोगी को जो करने की कोशिश कर रहा है उसमें मौजूद होना चाहिए। – Derek

उत्तर

0

भौतिक स्तर पर आपके द्वारा वर्णित रिश्ते को लागू करने के लिए, जैसा कि मामूली और संभवतः निषिद्ध है, वहां एक रोगी तालिका होनी चाहिए। तो फिर रिश्ते बस के रूप में नीचे मॉडलिंग की है:

public class Doctor 
{ 
    [Key] 
    public int DoctorId {get; set;} 

    public virtual ICollection<Patient> Patients {get; set;} 
} 

public class Patient 
{ 
    [Key] 
    public int PatientId {get; set;} 

    public virtual ICollection<Doctor> Doctors {get; set;} 

    public virtual ICollection<TestResult> Results {get; set;} 
} 

public class PatientMap : EntityTypeConfiguration<Patient> 
{ 
    public PatientMap() 
    { 
     HasMany(p => p.Doctors) 
     .WithMany(d => d.Patients) 
     .Map(x => { 
     x.ToTable("DoctorPatient"); 
     x.WithLeftKey("PatientId"); 
     x.WithRightKey("DoctorId"); 
     }); 
    } 
} 

public class TestResult 
{ 
    [Key] 
    public int ResultId {get; set;} 

    public int PatientId {get; set;} 

    [ForeignKey("PatientId")] 
    public virtual Patient Patient {get; set;} 
} 

और एसक्यूएल सिर्फ स्पष्टता के लिए:

create table Doctor(
    DoctorId int not null primary key, 
    Name nvarchar(50) not null 
) 

create table Patient(
    PatientId int not null primary key, 
) 

create table DoctorPatient(
    DoctorId int not null, 
    PatientId int not null, 
    primary key (DoctorId, PatientId), 
    foreign key (DoctorId) references Doctor(DoctorId), 
    foreign key (PatientId) references Patient(PatientId) 
) 

create table TestResult(
    ResultId int not null primary key, 
    PatientId int not null, 
    foreign key (PatientId) references Patient(PatientId) 
) 
संबंधित मुद्दे