SQL Concrete Vs Class Table Наследование скорости запросов на один подтип

Я взвешиваю между наследованием бетонов и таблиц классов (см. Пример ниже). Таблица классов, безусловно, имеет много преимуществ, в частности, для моего сценария столбцы супер таблиц гарантированно согласованы по всему набору данных. Однако у меня почти нет необходимости запрашивать каждый подкласс сразу, вместо этого все запросы будут одновременно выполняться по одному подклассу (из которых есть как минимум 9 подклассов).

Таким образом, с моим количеством строк, которое будет выглядеть так, как будто оно будет очень большим, было бы намного быстрее выполнить запрос к одной конкретной таблице с меньшим количеством строк, т. Е.: (согласно примеру ниже)

SELECT property_address
FROM policies_property
ORDER BY date_issued DESC;

Или же отношения между внешними ключами будут достаточно быстрыми, чтобы любая разница в скорости запросов при поиске очень большой супер-таблицы была незначительной в наследовании таблиц классов: (согласно примеру ниже)

SELECT property_address
FROM policies_property INNER JOIN policies_super ON policies_property.id = policies_super.id
ORDER BY policies_super.date_issued DESC;

Пример конкретного наследования: полностью отдельная таблица для каждого типа с общими столбцами, повторяемыми в каждой таблице>

--// Table: policies_motor
+------+---------------------+----------------+
| id   | date_issued         | vehicle_reg_no |
+------+---------------------+----------------+
|    1 | 2010-08-20 12:00:00 | 01-A-04004     |
|    2 | 2010-08-20 13:00:00 | 02-B-01010     |
|    3 | 2010-08-20 15:00:00 | 03-C-02020     |
+------+---------------------+----------------+

--// Table: policies_property    
+------+---------------------+------------------+
| id   | date_issued         | property_address |
+------+---------------------+------------------+
|    1 | 2010-08-20 14:00:00 | Oxford Street    |   
+------+---------------------+------------------+

Пример наследования таблиц классов: один суперкласс, много подклассов. Каждый идентификатор подкласса ссылается на идентификатор суперкласса.

--// Table: policies_super
+------+---------------------+
| id   | date_issued         |
+------+---------------------+
|    1 | 2010-08-20 12:00:00 |
|    2 | 2010-08-20 13:00:00 |
|    3 | 2010-08-20 14:00:00 | 
|    4 | 2010-08-20 15:00:00 |
+------+---------------------+

--// Table: policies_motor
+------+----------------+
| id   | vehicle_reg_no |
+------+----------------+
|    1 | 01-A-04004     |
|    2 | 02-B-01010     |
|    4 | 03-C-02020     |
+------+----------------+

--// Table: policies_property    
+------+------------------+
| id   | property_address |
+------+------------------+
|    3 | Oxford Street    |   
+------+------------------+

1 ответ

Решение

У меня почти нет необходимости запрашивать каждый подкласс за раз, вместо этого все запросы будут выполняться по одному подклассу за раз (из которых есть как минимум 9 подклассов).

Для меня это звучит убедительная причина держать их отдельно. Не думайте, что подход "суперкласса" "лучше нормализован" или "более реляционен" и т. Д. Это просто два варианта дизайна, которые одинаково применимы в теории; пойти с тем, который имеет больше всего смысла на практике.

Другие вопросы по тегам