Как создать правильную структуру базы данных для доменов и поддоменов? - PullRequest
0 голосов
/ 16 января 2019

У меня есть список доменов и список поддоменов. Например:

домен A имеет дочерние домены a1, a2, a3.
домен B имеет поддомен b1, b2, b3.
домен C не имеет поддоменов

Мне нужно создать структуру базы данных, чтобы я мог заказать ее так:

A
a1
a2
a3
B
b1
С

И мне нужно четко увидеть, какой из них является доменом или поддоменом какого домена.

Я пытался поместить домены в одну таблицу и субдомены в другую таблицу с 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())

1 Ответ

0 голосов
/ 17 января 2019

Вы запрашиваете модель данных и запрос SQL.

Вы можете использовать две таблицы:

  • домен (domain_id, имя)
  • поддомен (subdomain_id, name, 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, name, 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...