Как лучше организовать базу данных?

368
03 февраля 2017, 07:27

Есть два варианта для организации структуры базы данных. Первый вариант создать одну таблицу с 4 колонками (Ид, тип, ключ, значение). Второй вариант для каждого типа создать собственную таблицу, где в качестве ключа будет выступать колонка таблицы.

Проблема в том, что в первом варианте записей в таблице может быть за 100 000 (хотя он более гибкий), но во-втором случае около 100 таблиц(хотя это не проблема, таблицу генерируются автоматически)

Более наглядная схема:

1 Вариант:

ID  |  type  |  key |  value   
1     'cat1'  'key1'   'value1'
1     'cat1'  'key2'   'value2' 
1     'cat1'  'key3'   'value3' 
2     'cat1'  'key1'   'value4'
2     'cat1'  'key2'   'value5' 
2     'cat1'  'key3'   'value6' 
3     'cat2'  'keyn'   'valuen'
....

2 Вариант

Таблица cat1
id  |   key1  |  key2  | key3
 1     value1 | value2 | value3
 2     value3 | value4 | value5

Вопрос какой вариант оптимальнее. Есть ли глобальные отличия в производительности? Что можно применить, чтобы повысить производительность? Буду рад любому совету

Answer 1

Не понимаю, в чем проблема?

types

id | type | value
1    cat1 | value1
2    cat2 | value2

keys

id | key  | value
1    key1 | value1
2    key2 | value2

types_keys

id | type_id | key_id | value
1    1       | 1      | value1
2    1       | 2      | value2

animals

id | value
1  | value1
2  | value2

animals_types_keys

id | animal_id | type_key_id
1    1         | 1
2    1         | 2

Вроде, этот вариант структуры бд позволяет динамично работать с вашими данными.

Хотя, можно и сделать вместо 2 таблиц types_keys и animals_types_keys одну таблицу animals_types_keys:

id | animal_id | type_id | key_id | value
1    1         | 1       | 1      | value1
2    1         | 1       | 2      | value2

Похоже, что это фактически ваша таблица, только приведена к нормальной форме.

READ ALSO
Выполнять php процесс в фоне

Выполнять php процесс в фоне

Есть функция отправки sms уведомления на php, она выполняется около 3х секунд, иногда приходится делать рассылку сразу на несколько номеров,...

421
Doctrine query builder как указать поля связи в выборке

Doctrine query builder как указать поля связи в выборке

ЗдравствуйтеСтолкнулся с проблемой, как указать при выборке поля в query builder, которые являются связующими (в моём случае много ко многим)?

387
Мониторинг игрового сервера

Мониторинг игрового сервера

Нужен простой скрипт php скрипт для вывода информации с игрового сервера типа:

454
PHPExcel ошибка communication failure

PHPExcel ошибка communication failure

Как в phpexcel можно сослаться на определенный лист, чтобы использовать в формуле данные с него =СУММ('Part2'!P25:P29), то есть 'Part2' заменить?

365