Как мне представить иерархию классификации объектов в СУБД - PullRequest
1 голос
/ 07 мая 2009

Мои данные, ЕСЛИ это будет представлено объектами, это будет выглядеть так:

abstract class A{
   int a;
   int b;
   string c;
}

class B inherits A{
  string D;
}

class C inherits A{
  int e;
  int f;
}

Мой вопрос: создать ли отдельную таблицу для объектов B и C, Или я создаю одну основную таблицу, и для каждого типа сущности я делаю разные объединения для извлечения данных.
В реальном мире у меня будет около 15 одинаковых полей для всех сущностей и около 1-3 уникальных полей для каждой сущности.
Я ожидаю максимум 100K записей.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 07 мая 2009

Вы не найдете недостатка в мнениях по этой теме. Многие люди выступают за наследование конкретной таблицы , где (как вы описываете в первом варианте) вы явно определяете данные в каждой таблице.

Учитывая ваше второе утверждение, я бы не рекомендовал бы этот шаблон. Я хотел бы пойти с идеей иметь «основную» таблицу, представляющую ваши родительские и вспомогательные таблицы, представляющие дочерние элементы. Возможно, вы захотите включить какой-либо идентификатор типа в вашу основную таблицу, чтобы указать, какой это тип сущности, но это может или не может быть необходимо. Как минимум, вам нужно что-то вроде ...

tableA
(
    ID (primary),
    A,
    B,
    C
)

tableB
(
    ID (primary and foreign->table_A),
    D
)

tableC
(
    ID (primary and foreign->table_A),
    E,
    F
)
3 голосов
/ 07 мая 2009

table_a содержит все подобные поля, table_B и table_c содержат уникальные поля

table_A
   PKa
   a int
   b int
   c string


table_B
  PKb
  FKa
  D string


table_C
  PKc
  FKa
  e int
  f int
...