Squeak.ru - шаблоны программирования

Какова лучшая структура таблицы базы данных для хранения одной строки данных в MySQL?

Поэтому я точно не знаю, как назвать этот вопрос. Я создаю базу данных и мне нужно хранить некоторую информацию о SEO по умолчанию следующим образом.

default page title
default keywords
default page description
header code
footer code

Никогда не будет более 1 записи в поле. Итак, вопрос в том, создаю ли я таблицу в базе данных со столбцами для каждого из этих типов данных с пониманием того, что когда-либо будет только 1 строка данных?

ИЛИ мне создать таблицу, в которой есть столбец имени для каждого из полей, а затем столбец для данных (текст)? С этой опцией я вижу, что я не смогу установить тип данных для каждого поля, вместо этого каждое должно быть крошечным текстом или varchar.

Вот две структуры таблиц базы данных, которые я рассматриваю.

CREATE TABLE `cms_seo` (
`id` int(2) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`data` tinytext NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `cms_seo`
(`id`, `name`, `data`)
VALUES
(1, 'Website Keywords', ''),
(2, 'Default Page Title', ''),
(3, 'Default Page Description', ''),
(4, 'Header Code', ''),
(5, 'Footer Code', '');

OR

CREATE TABLE `cms_seo`(
`id` INT(1) NOT NULL AUTO_INCREMENT,
`default_page_title` VARCHAR(500) NOT NULL,
`default_keywords` VARCHAR(1000) NOT NULL,
`default_page_description` TINYTEXT NOT NULL,
`header_code` TINYTEXT NOT NULL,
`footer_code` TINYTEXT NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `cms_seo`
(`id`,
`default_page_title`,
`default_keywords`,
`default_page_description`,
`header_code`,
`footer_code`)
VALUES
(NULL, '', '', '', '', '');

Есть ли альтернатива хранению этих данных? Например, в текстовом файле? Данные должны быть доступны для редактирования через cms.


  • № 2 для победы, как ответил Тим. 27.07.2016
  • Есть ли лучший способ назвать этот вопрос? 27.07.2016
  • @drooh Да, вы могли бы назвать заголовок Какая структура таблицы лучше всего подходит для хранения одной строки данных в MySQL ... это, вероятно, не совсем то, о чем вы спрашиваете, но это близко, и это может помочь вам получить больше внимание. 27.07.2016
  • Я буду несогласным с оговоркой - если вы знаете наверняка и без каких-либо сомнений, что НИКОГДА не будет другого значения, которое вам нужно будет хранить, и что, без тени сомнения, НИКОГДА не будет дубликатов значение, то вариант 2 будет работать. В противном случае вариант 1 дает вам больше гибкости за счет эффективности и сложности. Кроме того, реализация значения имени в базе данных noSQL очень похожа на вариант 1. 27.07.2016

Ответы:


1

Обычно тип данных, который вы описываете, хранится в формате «ключ/значение», как в вашем проекте № 1. Некоторые преимущества включают в себя:

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

Преимущества конструкции №2:

  • Вы можете использовать типы данных MySQL, чтобы ограничить длину или формат каждого столбца по отдельности. Схема № 1 требует, чтобы вы использовали тип данных, который может хранить любое возможное значение.
  • Вы сохраняете имена свойств как метаданные, а не как строки. Использование метаданных для имен свойств является более «правильным» дизайном реляционной базы данных.

В прошлом я много раз писал, что отговариваю людей от использования схемы «ключ/значение» для данных. Но это законное использование этого дизайна, когда у вас есть только один набор значений, таких как значения по умолчанию в вашем случае.


Другой вариант, как вы упомянули, - хранить данные в файле, а не в базе данных. См. http://php.net/manual/en/function.parse-ini-file.php

Другой вариант - сохранить значения по умолчанию в файле PHP. Просто объявите их хэш-массив. Одним из преимуществ этого метода является то, что файл PHP преобразуется PHP в байт-код, а затем кэшируется.

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

27.07.2016
  • Хорошо, спасибо за разъяснения. В этой ситуации я храню такой небольшой объем данных, что не знал, в каком направлении двигаться, и даже рассматривал возможность сохранения их в текстовом файле. Кажется, если в редком случае мне нужно добавить еще одно поле, я мог бы сделать это в любом случае довольно легко. Думаю, мне нужно взглянуть на мою логику php и посмотреть, какой путь будет легче расширить. 27.07.2016

  • 2

    Этот ответ действительно что-то среднее между прославленным комментарием и полным ответом. Я предпочитаю вариант № 2, потому что в какой-то момент в будущем вам может понадобиться более одной записи-заполнителя. Кроме того, если вы выберете второй вариант, вы сможете использовать реляционные возможности MySQL, такие как объединение по имени столбца.

    27.07.2016
  • между прославленным комментарием и полным ответом - Честность всегда лучшая политика ;-) 27.07.2016
  • @ Fred-ii- Если по какой-то странной причине ему действительно нужен текст имен этих столбцов, то я ошибаюсь, но держу пари, что это не так. 27.07.2016
  • @Tim Мне тоже нравится версия 2, просто мне показалось немного странным иметь таблицу, в которой всегда будет только 1 строка данных. В моем общем дизайне в таблице страниц каждая таблица может хранить свою собственную информацию о SEO, которая переопределяет то, что находится в этой таблице. 27.07.2016

  • 3

    Нет ничего плохого в таблице только с одной строкой. (Относительно, его единственный ключ-кандидат — {}, но SQL не позволяет вам выразить это напрямую.)

    Реляционно, то есть если вы хотите задать произвольные вопросы об отдельных ключевых словах или наборах ключевых слов, вам следует хранить, запрашивать и манипулировать этой «строкой» как двумя таблицами:

    CREATE TABLE `cms_seo`(
    `id` INT(1) NOT NULL AUTO_INCREMENT,
    `default_page_title` VARCHAR(500) NOT NULL,
    `default_page_description` TINYTEXT NOT NULL,
    `header_code` TINYTEXT NOT NULL,
    `footer_code` TINYTEXT NOT NULL,
    PRIMARY KEY (`id`)
    )
    CREATE TABLE `cms_seo_keyword`(
    `seo_id` INT(1) NOT NULL,
    `default_keywords` VARCHAR(1000) NOT NULL,
    PRIMARY KEY (`seo_id`, `default_keywords`),
    FOREIGN KEY (`seo_id`) REFERENCES `cms_seo` (`seo_id`)
    )
    

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

    PS Design 1 — это дизайн EAV. Исследуйте проблемы EAV. По сути, это означает, что вы используете СУБД для реализации и использования программы (наполненной ошибками и бедной функциональностью), чья желаемая функциональность - это... СУБД. Вы должны использовать такой дизайн только в том случае, если вы демонстрируете, что простой реляционный дизайн с использованием DML и DDL дает недостаточную производительность, а дизайн EAV дает. (И это включает текущую стоимость / расходы на недостатки EAV.)

    27.07.2016
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...