Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2011, 00:23   #1
matrixphp
 
Регистрация: 04.03.2011
Сообщений: 9
Восклицание Как правильно создать таблицу.

Делаю вебсайт для бух учета, и чтобы не вдаваться в их нудные термины попробую изложить проблему на примере игры.
Есть таблица персонажей, примерно, 80 столбцов: имя, сила, ловкость...броня головы, броня корпуса, броня ног, инвентарь...умение стрелять, умение кидать, умение прыгать...
С ячейками имя, сила, ловкость все порядковые по другому и быть не могло. Но с "броня головы" уже начинаются проблемы - так как она включает в себя сразу несколько параметров:
Название брони | Состояние | Цена | Класс брони | Сила 2 | Ловкость 2 | Требование силы 8...
И так все слоты вещей...
Чтобы не хранить в столбцах вещей что-то вроде этого -
Название брони1<split>Класс брони<split>Сила 2<split>Ловкость 2<split>Требование силы 8<split2>
записываю вещь в таблицу вещей [id | Название | Состояние | Цена | Парамерты | Требования], а в таблице персонажей только id.
Но такая структура меня не очень то устраивает т.к. чтобы удалить, передать вещь нужно редактировать обе таблицы. И это самые простые примеры работы с вещами...

Хочу отказаться от такой структуры и сделать так:

Из таблицы персонажей удалить колонки вещей (броня головы, тела...), и создать таблицу только для вещей:
[название | параметры | требование | кому принадлежит | тип слота(голова, корпус...)]
Этот вариант намного удобнее и универсальнее остальных, но здесь будет примерно в 20 раз больше строк, чем таблице параметров т.к. у каждого персонажа к примеру 10 вещей на себе + еще инвентарь. И получается что строк много, а ключа нет вовсе...
Запрос будет представлять что-то вроде SELECT * FROM `DB`.`Вещи` WHERE `имя`="Вася"

Люди подскажи какой вариант будет производительнее и лучше, не откажусь от ваших предложений.
PS Надеюсь с примером не перегнул просто опыт как геймера побольше, чем программиста и бухгалтера вместе взятых...
PPS C нормальными формами знаком, пример слишком сложный и подниматься выше 2НФ сложно, да и в результате получиться десяток другой таблиц, выборка из которых займет целую вечность.
matrixphp вне форума Ответить с цитированием
Старый 05.03.2011, 00:51   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Ну на вскидку я бы предложил первый вариант, потому что второй я слабо понял)))
Что касается БД, то зря вы боитесь
Код:
чтобы удалить, передать вещь нужно редактировать обе таблицы.
Потому что современные базы данных могут автоматически следить за своим состоянием. Например можно сделать так, чтобы при изменении первичного ключа, внешние ключи также менялись или удалялись. Даже если БД типа MySQL MyIsam этого не позволяет, то все это можно реализовать с помощью триггеров. Одним словом в любом случае достаточно легко синхронизировать любое количество таблиц.
Cronos20 вне форума Ответить с цитированием
Старый 05.03.2011, 01:26   #3
matrixphp
 
Регистрация: 04.03.2011
Сообщений: 9
По умолчанию

Второй вариант: отличается от первого тем, что там все вещи тупо сведены в одну таблицу и выборку делаем не по id вещи, а по нику персонажа которому эта вещь принадлежит
matrixphp вне форума Ответить с цитированием
Старый 05.03.2011, 11:43   #4
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Создаете 3 таблицы:
1. Список персонажей
2. Список вещей с их свойствами
3. Таблица, связывающая первые две со столбцами id.персонаж и id.вещи
И обязательно вместо ника использовать id + расставить ключи (либо триггерами).
Выборка из всего этого с помощью JOIN - и все просто и логично
Cronos20 вне форума Ответить с цитированием
Старый 05.03.2011, 18:28   #5
matrixphp
 
Регистрация: 04.03.2011
Сообщений: 9
По умолчанию

Спасибо, попробую
matrixphp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать таблицу с полями в асм Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 01.12.2010 19:11
Как создать таблицу BDE ? Даниил_глазко Помощь студентам 2 21.11.2010 11:28
Как создать правильно запрос .... EugeneIsmatulin SQL, базы данных 15 28.05.2009 09:20
Как правильно сохранить данные в таблицу??? kAtenok87 PHP 4 07.05.2009 11:24
Как создать таблицу в таблице?? Ntlegend Помощь студентам 1 14.05.2007 07:37