簡體   English   中英

如何為域和子域創建合適的數據庫結構?

[英]How to create a proper database structure for domains and subdomains?

我有一個域列表和子域列表。 例如:

域A具有子域a1,a2,a3。
域B具有子域b1,b2,b3。
域C沒有子域

我需要創建數據庫結構,以便可以這樣進行排序:

一種
A1
a2
A3

B1
C

我需要清楚地看到哪個是哪個域的域或子域。

我試圖用ForeignKey到域將域放在一個表中,將子域放在另一表中。

class Domain(Base):
    __tablename__ = "domains"
    domain_id = Column(Integer(), primary_key=True)
    name = Column(String(), unique=True)


class Subdomain(Base):
    __tablename__ = "subdomains"
    subdomain_id = Column(Integer(), primary_key=True)
    name = Column(String(), unique=True)
    domain_id = Column(Integer, ForeignKey('domains.domain_id'))

我正在使用此表中的域和子域來創建第三個表:

class Title(Base):
    __tablename__ = "titles"
    title_id = Column(Integer(), primary_key=True)
    domain_id = Column(Integer, ForeignKey('domains.domain_id'))
    subdomain_id = Column(Integer, ForeignKey('subdomains.subdomain_id')) -- NULL if that is a Domain
    title = Column(String())
    status = Column(Integer())

您正在要求一個數據模型和一個SQL查詢。

您可以使用兩個表:

  • 域(domain_id,名稱)
  • 子域(subdomain_id,名稱,domain_id)

與此查詢:

select name
from
(
  select name, name as domain_name, 'domain' as type
  from domain
  union all
  select sd.name, d.name as domain_name, 'subdomain' as type
  from domain d
  join subdomain sd on sd.domain_id = d.domain_id
)
order by domain_name, type, name;

或者只是一張桌子:

  • 域(domain_id,名稱,parent_domain_id)

與此查詢:

select name
from
(
  select name, name as domain_name, 'domain' as type
  from domain
  where parent_domain_id is null
  union all
  select sd.name, d.name as domain_name, 'subdomain' as type
  from domain d
  join domain sd on sd.parent_domain_id = d.domain_id
)
order by domain_name, type, name;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM