|
|
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Есть сущности предметной области, которые имеют отношения общности. То есть у них есть общие для всех и характерные только для себя атрибуты. Необходимо в приложении их выводить в одном списке и позволять работать с ними (CRUD). Как их лучше хранить в БД? Сделать одну общую таблицу и унаследовать от нее таблицы отдельных сущностей, а обращаться к ним через view или определять на уровне приложения, к какой таблице необходимо обратиться? Или сделать общую таблицу для всех сущностей и пофиг, что будут пустые поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 14:31 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
ares4322...То есть у них есть общие... имхо туплю: парент-чайлд, не ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 15:19 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
Да, отношение общности - это наследование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 15:21 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
Тяжело дать единственно правильный ответ - всё зависит от того как будет меняться структура таблиц(ы) и как быстро будет заполняться она. Если структура атрибутов более-менее стабильная, и кол-во строк не очень велико, то будет лучше хранить всё в одной таблице. Если же, Вы видите, что структура в будущем будет меняться, или кол-во записей будет "бешено" расти - лучше разбить по нескольким таблицам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2011, 17:19 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
А почему в случае роста появятся проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 08:55 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
ares4322, 1. Касательно структуры: Мы мыслим категориями: сущности. Наследование это способ оптимизации кода и данных - что лучше делать постфактум ;). Если проект молодоай, то Вы не можете наверняка предсказать как будет расти какая сущность - и через время Ваша одна таблица всех сущностей превратится в "тут играй, тут не играй, а здесь играй только так" - Начнётся постоянный ребрендинг. 2. Касательно кол-ва строк: Сделайте самый простой запрос к таблице из 1 000 000 записей, а потом к таблице из 30 000 000 - посмотрите во сколько раз выросло время выполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 10:08 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
С первым пунктом полностью согласен. Проект молодой и много непоняток. И вообще - преждевременная оптимизация - зло ). По второму пункту есть ньюанс. При загрузке приложения необходимо вывести все сущности этого типа. И придется запрашивать данные из всех подобных таблиц. Наверное, я приду к отдельным таблицам под каждый тип сущности. Но реализую это попозже. Пока есть более важные задачи. Спасибо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 11:27 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
ares4322 , Как я понимаю, Вы используете реляционную СУБД ? Наследование в PostgreSQL Наследование таблиц (топик в разделе Oracle) Для объектной СУБД Caché пример с наследованием выглядит так: ///Класс предок Class del.p1 Extends %Persistent { Index iExtent [ Extent ]; Property Поле1 As %Integer; Property Поле2 As %Date; Property Поле3 As %String(MAXLEN = 20); } ///Класс наследник Class del.p2 Extends del.p1 { ///Коллекция-список чисел; Property Поле4 As list Of %TinyInt; } Заполняем данными: insert into del.p1(Поле1,Поле2,Поле3) values (1,current_date,'test1') insert into del.p2(Поле1,Поле2,Поле3,Поле4) values (2,current_date,'test2',2) select * from del.p1 Результат:IDПоле1Поле2Поле31127.07.2011test12227.07.2011test2 select * from del.p2 Результат:IDПоле1Поле2Поле3Поле42227.07.2011test22 К данным наследников можно обратиться и из предка, используя служебное поле x__classname : select * from del.p1 where x__classname [ 'del.p2' Результат:IDПоле1Поле2Поле32227.07.2011test2 В цепочке наследования может участвовать более двух классов, поддерживается множественное наследование. Objects, SQL, and the Unified Data Architecture: Inheritance and SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 14:17 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
1112223332. Касательно кол-ва строк: Сделайте самый простой запрос к таблице из 1 000 000 записей, а потом к таблице из 30 000 000 - посмотрите во сколько раз выросло время выполнения запроса.Многое зависит от используемой СУБД. Например, в СУБД Caché существуют специальные индексы ( bitmap /bitslice), которые дают возможность использовать встроенную в неё бизнес-аналитику в режиме реального времени без необходимости создания отдельного хранилища данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 15:38 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
К сожалению у нашей компании нет возможности использовать платные СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 17:23 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
ares4322К сожалению у нашей компании нет возможности использовать платные СУБД.Жаль... А что насчёт бесплатного PostgreSQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 17:41 |
|
||
|
Одна общая таблица или несколько унаследованных?
|
|||
|---|---|---|---|
|
#18+
Как раз им и пользуемся. Но наследование в нем не доведено до конца, так как ограничения (например, индексы), работают независимо от наследования. Поэтому и пользоваться наследованием для моей задачи особого смысла нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2011, 18:31 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37367514&tid=1542076]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 513ms |

| 0 / 0 |
