Django的ORM實(shí)現(xiàn)數(shù)據(jù)庫設(shè)計(jì)

  1. 病人信息表
class Patient(models.Model):
    SEX = (('M', 'Male'), ('F', 'Female'))
    patient_ogid = models.CharField(max_length=20)
    name = models.CharField(max_length=100)
    age = models.IntegerField()
    gender= models.CharField(max_length=1, choices=self.SEX)
    id_number = models.CharField(max_length=18)
    hospital = models.CharField(max_length=200, default='-')
    doctor = models.CharField(max_length=100, default='-')
    addresss = models.CharField(max_length=300, default='-')
    telephone = models.CharField(max_length=15, default='-')
    package = models.ForeignKey(Package, ondelete=models.CASCADE)
    cancer = models.ForeignKey(Tumor, ondelete=models.CASCADE)

    def __str__(self):
        return self.name
  1. 樣品信息表
class Sample(models.Model):
    sample_type = models.CharField(max_length=20)
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE, related_name="samples")
    ammount = models.IntegerField()
    unit = models.CharField(max_length=10)
    sampling_date = models.DateField()
    notes = models.CharField(max_length=100, blank=True)

    def __str__(self):
        return '_'.join([self.patient.name, self.sample_type])
  1. 測序記錄表(包括關(guān)聯(lián)外鍵的兩個(gè)表)
class Tissues(models.Model):
    name = models.CharField('Tissue name', max_length=20, primary_key=True)
    full_name = models.CharField('Tissue full name', max_length=100, blank=True)

    def __str__(self):
        return self.tissue_short_name

class Panel(models.Model):
    panel_name = models.CharField('Panel name', max_length=50, primary_key=True)
    panel_path = models.CharField('Panel full path', max_length=500)
    panel_type = models.CharField('Panel type', max_length=20)
    panel_subtype = models.CharField('Panel subtype', max_length=20, default='unknown')

    def __str__(self):
        return self.panel_name

class Record(models.Model):
    sample = models.ForeignKey(Sample, on_delete=models.CASCADE, related_name="records")
    full_id = models.CharField('Full ID', max_length=100, unique=True)
    og_id = models.CharField('OG ID', max_length=100)
    capm = models.CharField('CA-PM', max_length=100)
    r1 = models.CharField('R1', max_length=500)
    r2 = models.CharField('R2', max_length=500)
    tissue = models.ForeignKey(Tissues, on_delete=models.CASCADE)
    panel = models.ForeignKey(Panel, on_delete=models.CASCADE)
    create_date = models.DateTimeField('Disk date')
    r1_size = models.IntegerField('R1 Size (MB)', max_length=10, default=-1)
    r2_size = models.IntegerField('R2 Size (MB)', max_length=10, default=-1)
    indb_date = models.DateTimeField( 'In DB date', auto_now_add=True)
    outdate_status = models.Boolean('Is Outdate?', default=False)
    qc = models.CharField('QC', max_length=500, default='-')
  1. 基因位點(diǎn)表
class Site(models.Model):
    chrom = models.CharField(max_length=2)
    start = models.CharField(max_length=15)
    end = models.CharField(max_length=15)
    ref = models.CharField(max_length=1000)
    gene = models.ForeignKey(Gene, on_delete=models.CASCADE)
    nm_id = models.CharField(max_length=30)
    exon_id = models.CharField(max_length=10)

    @property
    def site_info1(self):
        return [self.chrom, self.start, self.end, self.ref]
    def site_info2(self):
        return [self.gene, self.nm_id, self.exon_id]
  1. 變異信息表
class Snv(models.Model):
    site = models.ForeignKey(Site, on_delete=models.CASCADE)
    alt = models.CharField(max_length=100)
    canno = models.CharField(max_length=100)
    panno = models.CharField(max_length=100)
    variant_type = models.CharField(max_length=30)
    rs_number = models.CharField(max_length=20, default='.')
    kgmaf = models.FloatField(max_length=20, default='0')
    sift = models.CharField(max_length=1, default='.')
    polyphen2 = models.CharField(max_length=1, default='.')

    @property
    def snv_info(self):
        return self.site.site_info1 + [self.alt] + self.site.info 2+ [self.canno, self.panno, self.variant_type, self.rs_number, self.kgmaf, self.sift, self.polyphen2]

  1. 測序變異信息
class Seqvars(models.Model):
    ngs_record = models.ForeignKey(Record, on_delete=models.CASCADE, related_name="seqvars")
    snv = models.ForeignKey(Snv, on_delete=models.CASCADE)
    vf = models.FloatField()
    total_dp = models.IntegerField()
    var_dp = models.IntegerField()
    mole = models.IntegerField()
   
    @property
    def seqvar_info(self):
        return self.snv.snv_info + [self.vf, self.total_dp, self.var_dp, self.mole]
  1. 套餐信息(+套餐基因)
class Package(models.Model):
    name = models.CharField(max_length=50)
    price = models.FloatField()
    tumor = models.ForeignKey(Tumor, on_delete=modelsCASCADE)
    gene = models.ManyToMany(Gene, related_name='genes')
  1. 基因表
class Gene(models.Model):
    symbol = models.CharField(max_length=30)
    full_name = models.CharField(max_length=100)
    detail = models.TextField()
    entrez_id = models.CharField(max_length=10)
    ensg_id = models.CharField(max_length=30)
  1. 癌癥信息表
class Tumor(models.Model):
    name = models.CharField(max_length=30)
    detail = models.TextField()
    notes = models.CharField(max_length=50, blank=True)
  1. 拷貝數(shù)變異與基因融合
class Cnv(models.Model):
    ngs_record = models.ForeignKey(Record, on_delete=models.CASCADE)
    gene = models.ForeignKey(Gene, on_delete=models.CASCADE)
    start = models.CharField(max_length=10)
    end = mdoels.CharField(max_length=10)
    copynum = models.IntegerField()


class Fusion(models.Model):
    ngs_record = models.ForeignKey(Record, on_delete=models.CASCADE)
    gene1 = models.ForeignKey(Gene, on_delete=models.CASCADE, related_name='gene1')
    start1 = models.CharField(max_length=10)
    end 1= mdoels.CharField(max_length=10)
    gene2 = models.ForeignKey(Gene, on_delete=models.CASCADE, related_name='gene2')
    start2 = models.CharField(max_length=10)
    end2 = mdoels.CharField(max_length=10)

  1. 藥物信息表
class Drug(models.Model):
    chinese_name = models.CharField(max_length=20)
    english_name = models.CharField(max_length=30)
    approved_num = models.CharField(max_length=30)
    detail = models.TextField()

  1. 藥物-癌癥表
class Drugcaner(models.Model):
    drug = models.ForeignKey(Drug, on_delete=models.CASCADE)
    tumor = models.ForeignKey(Tumor, on_delete=models.CACADE)
   
  1. 用藥信息表
class Drugusage(models.Model):
    drug = models.ForeignKey(Drug, on_delete=models.CASCADE)
    tumor = models.ForeignKey(Tumor, on_delete=models.CACADE)
    snv = models.ForeignKey(Snv, on_delete=models.CASCADE)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末簿煌,一起剝皮案震驚了整個(gè)濱河市巡语,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌截酷,老刑警劉巖镶摘,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荞雏,死亡現(xiàn)場離奇詭異况毅,居然都是意外死亡胶征,警方通過查閱死者的電腦和手機(jī)导犹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門唱凯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锡足,你說我怎么就攤上這事波丰。” “怎么了舶得?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵掰烟,是天一觀的道長。 經(jīng)常有香客問我沐批,道長纫骑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任九孩,我火速辦了婚禮先馆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躺彬。我一直安慰自己煤墙,他們只是感情好梅惯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仿野,像睡著了一般铣减。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脚作,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天葫哗,我揣著相機(jī)與錄音,去河邊找鬼球涛。 笑死劣针,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亿扁。 我是一名探鬼主播捺典,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魏烫!你這毒婦竟也來了辣苏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤哄褒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后煌张,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呐赡,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年骏融,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了链嘀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡档玻,死狀恐怖怀泊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情误趴,我是刑警寧澤霹琼,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站凉当,受9級特大地震影響枣申,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜看杭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一忠藤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楼雹,春花似錦模孩、人聲如沸尖阔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽介却。三九已至,卻和暖如春祭芦,著一層夾襖步出監(jiān)牢的瞬間筷笨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工龟劲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胃夏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓昌跌,卻偏偏與公主長得像仰禀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蚕愤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容