Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подход к хранению различных данных
 
 автор: tima2010   (18.07.2013 в 11:38)   письмо автору
 
 

Добрый день.

Интересует ваш совет по поводу моего решения хранения различных данных в базе.
Данные могут быть как список наименований услуг, так и список городов или список марок автомобилей с описанием.

На сколько правильно будет хранить их в одной таблице. Может быть лучше создавать для всех свои?

Создаю:


        CREATE TABLE IF NOT EXISTS data_fields (
        id INT NOT NULL AUTO_INCREMENT,
        PRIMARY KEY(id),
        data_key VARCHAR(255),
        data_value VARCHAR(255),
        data_value_two VARCHAR(255),
        data_int INT,
        data_int_two INT,
        data_date DATETIME,
        data_date_two DATETIME,
        data_text TEXT,
        data_text_two TEXT,
        data_type VARCHAR(255)
        ) ENGINE=MyISAM CHARACTER SET=utf8;


для любых данных есть по два поля которые могут быть заполнены. В зависимости от типа данных заполняю add_type. Когда нужно выбираю то, что мне нужно.

  Ответить  
 
 автор: Valick   (18.07.2013 в 19:25)   письмо автору
 
   для: tima2010   (18.07.2013 в 11:38)
 

На сколько правильно будет хранить их в одной таблице
чаще всего это не правильно
Существуют законы нормализации БД, ориентируясь на них и следует создавать архитектуру базы данных. Есть классический пример БД книжного магазина, поищите его в инете.
Еще одно правило, каждая сущность - это отдельная таблица, отношения сущностей многие ко многим описываются таблицей связи

  Ответить  
 
 автор: Sfinks   (19.07.2013 в 13:59)   письмо автору
 
   для: Valick   (18.07.2013 в 19:25)
 

> Существуют законы нормализации БД,
Не вижу их нарушения.
Если данные однотипные, то почему их не хранить вместе?

> каждая сущность - это отдельная таблица
Сущность - абстрактный объект у которого есть название и описание.

Таблица:
id | group_id | name | description
1; 1; стрижка; описание стрижки
2; 1; укладка; описание укладки
3; 2; Барнаул; красивый город
4; 3; Лада; ведро с гайками
5; 3; Ламборгини; Супер-кар

В чем нарушение?

Топикстартер, нужно по данным смотреть. Если они все всегда однотипные, то проблем нет.
Но если вам придется ради этого для некоторых групп хранить числа в поле VARCHAR, или для некоторых групп не существует какого-то параметра и соответствующее поле для этой группы всегда будет null, ТО ЭТО ЗЛО.

  Ответить  
 
 автор: tima2010   (19.07.2013 в 14:07)   письмо автору
 
   для: Sfinks   (19.07.2013 в 13:59)
 

спасибо за ответы!

почему NULL зло?

Что будет плохого если какая либо ячейка для определенного поля не заполнена и является null?
К примеру у стрижки нет data_text_two

запросом выбираю:

SELECT * FROM data_fields WHERE data_type = 'haircut'

  Ответить  
 
 автор: Sfinks   (19.07.2013 в 14:15)   письмо автору
 
   для: tima2010   (19.07.2013 в 14:07)
 

Потому что это уже нарушение законов нормализации.
Например если вы в мой пример добавите поля: диаметр колес, стоимость услуги и численность населения, то таблица у вас будет заполнена в шахматном порядке....
Это и есть ЗЛО =)
И это вам аукнется в будущем.

  Ответить  
 
 автор: tima2010   (19.07.2013 в 18:42)   письмо автору
 
   для: Sfinks   (19.07.2013 в 14:15)
 

к сожалению самостоятельно не могу найти нормальный мануал по теме: закон нормализации БД
можете дать пару линков?
заранее благодарен.

  Ответить  
 
 автор: Sfinks   (19.07.2013 в 18:51)   письмо автору
 
   для: tima2010   (19.07.2013 в 18:42)
 

http://ru.wikipedia.org/wiki/Нормальная_форма

  Ответить  
 
 автор: Valick   (19.07.2013 в 19:38)   письмо автору
 
   для: Sfinks   (19.07.2013 в 18:51)
 

там слишком высокопарно описано :)
тут проще http://www.wwwmaster.ru/article.php?nart=21

  Ответить  
 
 автор: tima2010   (14.08.2013 в 10:03)   письмо автору
 
   для: Valick   (19.07.2013 в 19:38)
 

Спасибо, нашел статью на Вашем же сайте - http://www.softtime.ru/bookphp/gl12_6.php

Понял что такое нормализация, но остался еще 1 вопрос в правильности построения запроса в ненормализированной таблице, где данные различаются по типу указанному в поле.

к примеру есть таблица:

my_table
- id
- name
- date
- text
- type

где хранятся различные данные, различить их можно по полю type.

Как происходит поиск по запросу?
SELECT text WHERE type = 'articles' AND name = 'text'

Сначала выбираем тип записи, далее запрос производит сверку по полю NAME только с теми записями которые подходят по полю TYPE? или снова происходит выбор (поиск) по всей таблице?

Проще говоря:
Если из 100000 записей есть 2 с типом articles то произойдет поиск name только по двум или снова по всем 100000 ?

Спасибо.

  Ответить  
 
 автор: Sfinks   (14.08.2013 в 14:39)   письмо автору
 
   для: tima2010   (14.08.2013 в 10:03)
 

Все на много сложнее.

Во первых поиск ведется по всем условиям сразу, а не сначала по одному, потом по другому.

Во вторых Перед поиском включается оптимизатор, который пытается уменьшить количество условий... В мане есть очень хорошее описание этого процесса. Не найду сейчас, но суть примерно следующая... Если у вас есть условия:
... WHERE id < 10 AND id < 20 AND id > 15
то оптимизатор сперва сведет это к
... WHERE id < 10 AND id > 15
а затем к
... WHERE false
и вернет 0 строк ничего не проверяя.

А если у вас есть:
... WHERE id < 10 AND id < 20 AND id > 8
то, если id - целое оптимизатор к конечном итоге сведет это к
... WHERE id = 9
и будет искать по равенству.

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

  Ответить  
 
 автор: tima2010   (14.08.2013 в 21:34)   письмо автору
 
   для: Sfinks   (14.08.2013 в 14:39)
 

Спасибо за развернутый ответ, буду читать про индексы.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования