2015-07-11 6 views
5

У меня будет сайт, на котором будут миллионы таблиц (буквальные таблицы HTML с данными в них), поэтому мне нужно будет их сохранить. Я борюсь с вопросом о том, должна ли каждая строка таблицы храниться как отдельная запись в базе данных, или если я просто должен хранить всю таблицу в виде данных, закодированных JSON (или аналогичного формата).Как настроить таблицы базы данных, которые будут хранить табличные данные?

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

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

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

Я сделал некоторые расчеты и эти грубые цифры:

~ 912 всего предприятие ~ 800 средних мест в США ~ 729,600 всего таблиц ~ 72 миллионов полных строки таблицы

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

table description

+0

Что бы они искали, даже чтобы найти стол для начала? – Drew

+0

@DrewPierce Я не уверен, что понимаю вопрос. В двух словах, у меня будет таблица для каждого бизнес-местоположения, поэтому каждое рабочее место будет иметь свою собственную таблицу (и резервные копии их старых табличных версий). Владелец бизнеса сможет отредактировать его, как они хотят, включить их соответствующую деловую информацию. Тем не менее, отдельные пользователи также смогут редактировать определенные части таблицы. – zen

+0

@Basic У меня есть реляционные данные. У меня будут имена компаний, а затем отдельные бизнес-местоположения, тогда каждое место для бизнеса будет иметь одну из собственных таблиц. Я не знаю много о NoSQL или о том, как он работает в отношении того, как он обрабатывает реляционные данные, но я определенно имею его. – zen

ответ

3

Не храните HTML в базе данных - просто храните необработанные данные, для чего предназначены базы данных. Затем вы можете использовать PHP для форматирования его на ходу, как вам нравится, будь то таблица HTML на веб-странице, строка с кодировкой JSON для запроса API, отчета высокого уровня или экспорта файлов CSV. Вам нужен стол для бизнеса:

CREATE TABLE business (
    id UNSIGNED INT NOT NULL PRIMARY KEY, 
    name VARCHAR(255) NOT NULL, 
    address ... 
    city ... 
); 

один для расположения бизнеса:

CRATE TABLE location (
    id UNSIGNED INT NOT NULL PRIMARY KEY, 
    business_id UNSIGNED INT NOT NULL REFERENCES business(id), 
    name VARCHAR(255) NOT NULL, 
    description ... 
    KEY (business_id) 
); 

и один для предметов места:

CREATE TABLE item (
    id UNSIGNED INT NOT NULL PRIMARY KEY, 
    location_id UNSIGNED INT NOT NULL REFERENCES location(id), 
    type VARCHAR(255), 
    name VARCHAR(255), 
    size VARCHAR(255), 
    discount UNSIGNED INT, 
    KEY (location_id) 
); 

Вы, вероятно, хотите для настройки индексов и уникальности ключей на основе ваших требований. Я предполагаю, что вам понадобится уникальный ключ (location.business_id + location.name) и (item.location_id + item.name).

+0

Привет, Алекс, я бы никогда не хранил HTML в базе данных. Речь шла только о том, следует ли хранить целые данные таблицы как JSON, закодированные или похожие в одной записи, или хранить каждую отдельную строку таблицы как свою собственную запись. Если я сделаю последнее, мне также понадобится иерархия в строковых записях, потому что строки находятся в определенном порядке в таблице, а некоторые строки также могут быть заголовками или подзаголовками. – zen

+0

Храните каждую отдельную строку таблицы как свою собственную запись. Для этого нужны базы данных. Если вам нужно упорядочить, просто добавьте столбец 'sequence' в таблицу элементов. Не храните заголовки, это метаданные и не входят в таблицу. –

+0

Мне нужно будет иметь заголовки в таблице, чтобы группировать элементы вместе. По заголовкам я просто имею в виду, что некоторые строки таблицы будут иметь 'colspan =" 3 "' например, и растягиваются через таблицу. И тогда все элементы в этой «группе» будут находиться под этим заголовком. Ниже приведено обновленное изображение таблицы с указанными заголовками: http://postimg.org/image/7glo7eb7t/ – zen

0

В вашем случае вы можете посмотреть в решение NoSQL как MongoDB и хранить ваши таблицы в качестве элементов в коллекции. MongoDB должен быть эффективен при обработке таблиц, хранящихся в формате JSON.

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

+0

Табличные строки будут варьироваться от 30 до 300 или около того. Преимущество хранения всех табличных данных как таблиц средних значений JSON может быть различным (т. Е. Иметь разные количества столбцов), тогда как если они будут сохранены в виде строк, мне придется установить некоторые границы, которым все они должны следовать. Хм. – zen

-1

Вы можете использовать PHP с mysql_connect, mysql_select_db, mysql_query и mysql_fetch_row.

На стороне CSS вы установили следующее:

table.db-table  
table.db-table th 
table.db-table td 

Затем, когда эти таблицы нарисованы РНР кода, вы можете создать еще несколько .CSS выполнять встроенное редактирование в ячейке в колонке. Вам понадобится JavaScript или перейти с помощью jQuery Framework.

Вы также можете использовать PDO PHP вместо mysql, как указано выше.

$dbh = new PDO("sybase:host=$host;dbname=$dbname, $user, $pass"); 
$q = $dbh->prepare("DESCRIBE tablename"); 
$q->execute(); 
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN); 

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

EDIT: Чтобы ответить на вопрос о настройке базы данных и всех ее таблиц, я попробую: ну, вы можете использовать реальные таблицы MySQL. Если вы знаете имена столбцов, когда вы получаете данные, вы можете просто составить подходящее имя таблицы (BTW, убедитесь, что вы сами это сделаете), создайте таблицу с необходимыми именами.

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