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 подклассов).
Для меня это звучит убедительная причина держать их отдельно. Не думайте, что подход "суперкласса" "лучше нормализован" или "более реляционен" и т. Д. Это просто два варианта дизайна, которые одинаково применимы в теории; пойти с тем, который имеет больше всего смысла на практике.