2012-06-10 2 views
0

Позвольте мне объяснить мою ситуацию для приложения, что я работаю,Таблица Дизайн- Mysql

Я близко к 7 категорий, позволяет сказать, A, B, C, D, E, F и G. Эти категории не имеют никакой таблицы в стороне БД. Теперь Пользователь выбирает некоторые категории из этих 7, скажем С, поэтому в категории С у меня есть еще одна группа подкатегорий, а именно C1, C2, C3-C30. Предполагается, что теперь пользователи Выбирает C2, для подкатегорий C2. У меня есть таблица в базе данных, которая вставлена ​​после того, как пользователь вводит все данные через интерфейс. Теперь таблица C2 имеет 8 столбцов, а именно c2t1id, c2t2 .... c2t8. Он также содержит столбец идентификатора автоинкремента, который получает автоинкременты для каждой вставки в эту таблицу и ее первичный ключ для этой таблицы.

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

Теперь моя таблица входа в систему структурирована с именем id/name/pw.

Теперь, глядя на мой дизайн из перспективы db, я начинаю понимать, что этот дизайн несколько испорчен, и я начинаю понимать, что просто для того, чтобы отыскать 5 записей пользователя, мне нужно поиск 200+ таблица с длинным мулитируемым выбором join?

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

ответ

0

Yup, этот дизайн проигравший. 210 таблиц? Подумайте еще раз. Прекратите думать в терминах таблиц и столбцов и выражайте это как проблему, которую вы пытаетесь решить. Возможно, реляционная база данных здесь не подходит.

+0

Благодаря Duffymo, но опять-таки я не думаю, что без БД, я построил applicaton.I думаю дб required.What думал создавал еще один столбец для подкатегорий таблицы, которая каким-то образом соотносить пользователю подкатегории, а затем тянуть данные из подкатегории, основанной на этом столбце. Но используя этот подход, также у меня есть поиск, близкий к 200 таблицам. Кроме этого, я пуст, как оптимизировать дизайн. –

+0

или duffymo я неправильно читаю вашу подсказку –

+1

Я думаю, что то, что @duffymo намекает в сторону, представляет собой базу данных типа NO-SQL. – bumperbox

1

Это определенно звучит так, как будто вам нужно изучить ваш дизайн, прежде чем продолжить.

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

Итак, расскажите нам, какие данные есть.

EDIT:

Учитывая то, что вы рассказали нам о своих данных, было бы выглядеть примерно так:

USER 
---------------------- 
ID (PK) INTEGER AUTOINCREMENT NOT NULL 
EMAIL (PK) VARCHAR(1000) NOT NULL 
FIRST_NAME VARCHAR(50) NOT NULL 
LAST_NAME VARCHAR(50) NOT NULL 
ENCRYPTED_PASSWORD ....etc 


POST 
-------------- 
ID (PK) INTEGER AUTOINCREMENT NOT NULL 
USER (FK) INTEGER NOT NULL 
CONTENT TEXT NOT NULL 
DATE_POSTED TIMESTAMP NOT NULL 
DATE_EDITED DATETIME NOT NULL 


POST_CATEGORIES 
-------------------- 
ID (PK) INTEGER AUTOINCREMENT NOT NULL 
CATEGORY_ID (FK) INTEGER NOT NULL 
POST_ID (FK) INTEGER NOT NULL 

CATEGORY (hierarchal table) 
------------------------------ 
ID (PK) INTEGER AUTOINCREMENT NOT NULL 
PARENT_ID INTEGER 
CATEGORY_NAME VARCHAR(200) NOT NULL 

Обратите внимание, что таблица КАТЕГОРИИ использует простую модель списка агентства. Возможны другие типы моделей. См. Превосходную статью Managing Hierarchal Data in MySQL для более подробной информации.

С помощью этой конструкции, получив список сообщений пользователя будет вопрос:

select * from POSTS where USER = (select ID from USER where FIRST_NAME = 'John' and LAST_NAME = 'Doe'); 

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

+0

привет wadesworlds, подкатегорию структура что-то вроде {CID: INT}, {ctitle: УАКСНАК}, {CNAME: УАКСНАК}, {caddr: УАКСНАК}, {CPH: ДВОЙНОЙ}, {коффс: УАКСНАК} , {ctmaps: VARCHAR}, {ctimg: VARCHAR}, {ctdatetime: DATETIME}. Это детали столбцов подкатегории для категории C. Другие категории могут содержать более 8 столбцов (я начал работать над этими модулей, но я уверен, что это будет больше столбцов, чем этот) .Data, что я вставляю, довольно проста, его форма с 7 полями и файлами хранится на локальном диске с путём, идущим в db. Так что нет blob или clob вовлечены где-то –

+0

Я не имею в виду рассказать нам о типах данных. Я имею в виду сказать, что делает приложение. Это система отслеживания заказов? Это ролевая игра? Это секвенирование генетики? Затем скажите нам, что такое данные: «каждый игрок может быть одним из 8 классов. Каждый класс может иметь до 20 способностей» и т. Д., Другими словами, описывайте, что вы пытаетесь сохранить. – wadesworld

+0

Привет, wadesworld, ближайший пример. Я могу подумать, что это сайт, основанный на ebay или craglist.if вы смотрите на дизайн классического или ebay классифицированного, мои требования выглядят почти одинаково. У вас есть основная категория, затем вы переходите подкатегорию, а затем публикуете некоторые подробности к подкатегории (для отправки вам требуется логин), ваши данные о сообщении вставляются в db.Good до сих пор. Здесь вы можете перемещать данные учетной записи пользователя, ему нужно посмотреть, сколько сообщений он сделал в месяц/день и т. д., так что очевидно, что вы нужно отслеживать его сообщения, и это нужно, я хочу это. Как я должен отслеживать это. –

0

Иерархическая структура с таблицей на узел не является обычным ответом - я бы предложил проверить ответы на this question, чтобы узнать, относится ли какой-либо из ваших рекомендаций к вашей проблеме.

+0

Нет, это не похоже на мои. У меня нет отношения с 3 до 4 уровня. Моя просто, у меня есть категории, которые являются родительскими, а затем каждый родитель будет есть много подкатегорий (скажем, 30 детей с разными столбцами в нем), пользователям разрешено делать вставки/обновление/поиск на дочерних элементах. Пользователи могут выполнять поиск для детей на основе родителя. Во всех случаях у меня около 8 родителей и каждого родителя будет иметь 30 детей min.So это становится одним для многих отношений для родителя ребенка. –

0

на основе ваших комментариев/объяснений @wadesworld Вот простой дизайн, который может направить вас в правильном направлении

Я сохранил структуру как можно более простым, вы можете все больше столбцов/детали для костюма ваше приложение, и я показал несколько примеров того, как вы можете запрашивать свои данные.

TABLE: USERS 
ID | USERNAME | PASSWORD 

TABLE: CATEGORIES 
ID | CATEGORY_ID | NAME 

TABLE: POSTS 
ID | CATEGORY_ID | DESCRIPTION | USER_ID 



// list all top level categories (We use NULL in categories.category_id to indicate it has no parents) 
SELECT * FROM categories WHERE category_id IS NULL; 

// list all sub categories for category_id = 2 
SELECT * FROM categories WHERE category_id=2; 

// list parent and child categories, for use in a html select 
SELECT parent.id, parent.name, child.id, child.name 
    FROM categories AS parent 
    JOIN categories AS child ON child.category_id=parent.id 
    WHERE parent.category_id IS NULL 

// insert a post into category_id=2 for user_id = 1 
INSERT INTO posts (category_id, description, user_id) 
    VALUES ('2', 'test post', 1); 

// select all posts by user with username=tom 
SELECT * FROM users 
JOIN posts ON posts.user_id=users.id 
JOIN categories ON categories.id=posts.category_id 
WHERE users.username='tom'; 

// count the number of posts made by tom in each category 
SELECT categories.name, COUNT(*) 
    FROM users 
    JOIN posts ON posts.user_id=users.id 
    JOIN categories ON categories.id=posts.category_id 
    WHERE users.username='tom'; 
    GROUP BY categories.name 
+0

Спасибо Bumperbox, я получил подсказку и от вас, и Wadesworld.I продолжаю эту тему продолжать еще несколько дней, когда я пробую эти изменения для нового модуля. –

Смежные вопросы