Вот 1 нф говорит: Переменная отношения находится в первой нормальной форме (1НФ) тогда и только тогда, когда в любом допустимом значении отношения каждый его кортеж содержит только одно значение для каждого из атрибутов.
Т.е. структуру в которой
id | field
1 | 1,2,3,4,5
2 | 1,2,3
Это надо нормализовать в вид
id | id_field | field
1 | 1 | 1
1 | 2 | 2
1 | 3 | 3
1 | 4 | 4
1 | 5 | 5
2 | 6 | 1
2 | 7 | 2
3 | 8 | 3
А находиться ли таблица в 1нф если есть поле json?
id | field
1 | {'a':1,'b':2,'c':3,'d':4,'e':5}
2 | 1,2,3
_____________
Трус не играет в хокей
Игорь_Vasinsky
7.05.2015 - 21:46
нет
вот так да
1 | {'a':1,'b':2,'c':3,'d':4,'e':5}
2 | 1
2 | 2
2 | 3
хотя первая строка...
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
stump, нормальная форма не для "мебели" или "красивых глаз".
Нормальная форма для того, что бы СУРБД могла работать (обрабатывать) на своём уровне по средствам языка SQL хранящиеся в БД данные.
_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
7.05.2015 - 22:15
Поддержу
Valick, добавив, что
WHERE field condition_operator value
Проблемотично (мягко говоря) будет сравнивать JSON строки
_____________
[продано копирайтерам]
Цитата (Valick @ 7.05.2015 - 22:02) |
stump, нормальная форма не для "мебели" или "красивых глаз". Нормальная форма для того, что бы СУРБД могла работать (обрабатывать) на своём уровне по средствам языка SQL хранящиеся в БД данные. |
Что за СУБД которая не может обработать строку 1,2,3,4,5, а получив в РНР эксплодом раскрыть массив. Другое дело что создать зависимости между таблицами используя строковые поля проблематично в реляционных СУБД. Также может быть и с полем Jain. Может его надо расценивать поле Json также как тип text?
_____________
Трус не играет в хокей
Игорь_Vasinsky
7.05.2015 - 22:58
Причём тут php. Речь идёт о субд
потом к примеру-тебе надо удалить все строки с 2? Как те тут php поможет?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата (stump @ 7.05.2015 - 21:54) |
Может его надо расценивать поле Json также как тип text? |
расценивайте, вам никто не запрещает, телько будьте добры работать с ним так же как с текстом, не более того.
_____________
Стимулятор ~yoomoney - 41001303250491
AllesKlar
7.05.2015 - 23:31
Ну а может, у него это поле с JSON не участвует в логике? Просто информационное, только читается и изменяется.
Тогда данный формат вполне имеет право на жизнь.
Я вообще прозрел в базах, когда пришлось жестко препарировать интернет-шоп. OsCommerce.
На мой взгляд, там суперская база.
Не, теорию я и до этого знал и что-то там релеционил, но вот отличное понимание пришло именно после нее. Рекомендую поколупать.
Грубо говоря, рассуждения бы шли так:
Есть товар. Значит таблица товара с полями цена, название, описание. (id по умолчанию везде есть)
Есть таблица позиций заказов. ну, тут все просто - id товара, количество товара, id заказа.
Стоп! А если я в будущем переименую товар, то клиент в своей истории покупок увидит уже совсем другое название. А если поменяю цену? Да, таблица позиций заказа должна быть денормализованой.
id товара (для статистики), наименование товара, цена, по которой клиент товар купил.
эээ.. а статистика по ценам?
Ведь, если меняю цену на товар, то теряется предыдущая цена.
ок, лепим еще одну таблицу с историей цен.
Хм, а зачем тогда вообще поле цена в таблице товара? Можно же из таблицы истории цен брать последнюю цену для данного товара.
Но тогда придется запрос к 2м таблицам.
И вот тут нет правильного и неправильного пути, должен сам решить, что для тебя важнее.
Повторяющееся поле в двух таблицах (запросы будут шустрее) или читать цену из таблицы истории цен (нет дублирующихся данных)
И т.д.
И вот, например, для таблицы позиций заказа, вполне бы подошло поле с JSON, чтобы кучу полей не городить, все равно они только для чтения и поиск по ним никогда не будет вестись.
_____________
[продано копирайтерам]
Цитата (Игорь_Vasinsky @ 7.05.2015 - 22:58) |
Причём тут php. Речь идёт о субд потом к примеру-тебе надо удалить все строки с 2? Как те тут php поможет? |
Сама по себе СУБД тоже удалять не умеет, ей надо запрос на удаление отправить. В отправке запроса поможет РНР.
У меня есть сомнения по поводу отношения 1:1 к ключевому столбцу поля json.
_____________
Трус не играет в хокей
AllesKlar
7.05.2015 - 23:42
stump
Отношение 1:1 - это денормализация, нужна в исключительных случаях.
Если тебе денормализация не нужна, то все поля второй таблицы, связанной 1:1 просто могут быть расширением первой таблицы.
_____________
[продано копирайтерам]
sergeiss
8.05.2015 - 00:35
stump, если тебе нужно работать в БД с JSON, то возьми нормальную БД, PostgreSQL. Не надо пытаться заставлять Мускуль делать то, для чего он не предназначен.
И вот почитай на досуге:
http://www.postgresql.org/docs/9.3/static/...tions-json.html и это
http://www.postgresql.org/docs/9.4/static/datatype-json.html
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Я и думал постгре использовать.
_____________
Трус не играет в хокей
sergeiss
8.05.2015 - 00:52
Цитата (stump @ 8.05.2015 - 00:49) |
Я и думал постгре использовать. |
Может быть, и это хорошо
Но ты это не озвучил, поэтому отвечали тебе, как я понял, исходя из использования Мускуля.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Цитата (sergeiss @ 8.05.2015 - 00:52) |
Цитата (stump @ 8.05.2015 - 00:49) | Я и думал постгре использовать. |
Может быть, и это хорошо Но ты это не озвучил, поэтому отвечали тебе, как я понял, исходя из использования Мускуля. |
Спасибо за ссылки - почитаю на досуге.
_____________
Трус не играет в хокей
Цитата (AllesKlar @ 7.05.2015 - 23:42) |
stump Отношение 1:1 - это денормализация, нужна в исключительных случаях. Если тебе денормализация не нужна, то все поля второй таблицы, связанной 1:1 просто могут быть расширением первой таблицы. |
Я имел ввиду отношение поля таблицы к ключевому полю таблицы.
_____________
Трус не играет в хокей
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.