Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц - комбинация данных / 11 сообщений из 11, страница 1 из 1
30.03.2011, 18:58
    #37190998
Volgar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
Делаю онлайн игрушку. Имеется допустим 100 разных объектов. Каждый объект имеет по отношению к другому объекту определенное свойство - пусть будет описание. У меня в игре появляется десяток объектов. При клике на пару объектов всплывает это свойство (описание). Все эти свойства хранятся в таблицах mySQL.

Не подскажите как лучше реализовать хранение данных в таблицах и как делать запрос для получения (например, id одного объекта и id второго - получает их свойство)?

Естественно таблица 100х100 не вариант. Есть какое-то решение, сейчас не вспомню как называется.
...
Рейтинг: 0 / 0
30.03.2011, 21:11
    #37191164
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
Volgar,

2 таблицы: свойства и связи.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE TABLE LINKS (
    ID      INTEGER NOT NULL,
    IDOBJ   INTEGER,           -- ID объекта
    IDPROP  INTEGER           -- ID свойства
);


CREATE TABLE PROPERTY (
    ID     INTEGER NOT NULL,
    PROP1  VARCHAR( 10 )               -- Свойство
);

При связывании объектов добавляются 2 строки в Связи. Выбирать можно как-то так:
Код: plaintext
1.
2.
3.
select p.* from property p
join links l1 on l1.idobj= 1 
join links l2 on l2.idobj= 2 
where p.id=l1.idprop and p.id=l2.idprop
или
Код: plaintext
1.
2.
3.
4.
select distinct p.prop1 from links l
join property p on p.id=l.idprop
where l.idobj in ( 1 ,  2 )
      and l.idprop=p.id
где 1 и 2 = ID объектов..
...
Рейтинг: 0 / 0
30.03.2011, 23:32
    #37191372
Volgar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
mvb, спасибо огромное. Только мне пока тяжело понять как будет формироваться таблица PROPERTY.

Конкретный пример.

TABLE LINKS
1 Огонь Вода
2 Вода Огонь
3 Огонь Воздух
4 Воздух Огонь
5 Воздух Вода
6 Вода Воздух
7 Песок Огонь
8 Огонь Песок
...
и т. д.

TABLE PROPERTY
1 Пар
2 Пар
3 Пожар
4 Пожар
5 Дождь
6 Дождь
7 Стекло
8 Стекло

Правильно? Или можно как-то упростить? Чтобы повторов не было.
...
Рейтинг: 0 / 0
30.03.2011, 23:54
    #37191403
Volgar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
Вернее для простоты нужно как то так:

TABLE LINKS
1 1 2
2 1 3
3 1 4
4 1 5
5 2 3
6 2 4
7 2 5
8 3 4
9 3 5
10 4 5
...
и т. д.

TABLE PROPERTY
1 1+2
2 1+3
3 1+4
4 1+5
5 2+3
6 2+4
7 2+5
8 3+4
9 3+5
10 4+5

Я сейчас проверил через PMD - не получается правильная выборка свойств.
...
Рейтинг: 0 / 0
31.03.2011, 12:51
    #37192151
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
Volgar, тогда лучше 3 таблицы - объекты, свойства и связи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE TABLE LINKS (
    ID       INTEGER NOT NULL,
    ID_OBJ   INTEGER,
    ID_PROP  INTEGER
);


CREATE TABLE OBJECTS (
    ID    INTEGER NOT NULL,
    NAME  VARCHAR( 20 ) CHARACTER SET WIN1251
);


CREATE TABLE PROPERTY (
    ID     INTEGER NOT NULL,
    PROP1  VARCHAR( 20 ) CHARACTER SET WIN1251
);


INSERT INTO LINKS (ID, ID_OBJ, ID_PROP) VALUES ( 1 ,  1 ,  1 );
INSERT INTO LINKS (ID, ID_OBJ, ID_PROP) VALUES ( 2 ,  2 ,  1 );
INSERT INTO LINKS (ID, ID_OBJ, ID_PROP) VALUES ( 3 ,  1 ,  4 );
INSERT INTO LINKS (ID, ID_OBJ, ID_PROP) VALUES ( 4 ,  4 ,  4 );

INSERT INTO OBJECTS (ID, NAME) VALUES ( 1 , 'Огонь');
INSERT INTO OBJECTS (ID, NAME) VALUES ( 2 , 'Вода');
INSERT INTO OBJECTS (ID, NAME) VALUES ( 3 , 'Воздух');
INSERT INTO OBJECTS (ID, NAME) VALUES ( 4 , 'Песок');

INSERT INTO PROPERTY (ID, PROP1) VALUES ( 1 , 'Пар');
INSERT INTO PROPERTY (ID, PROP1) VALUES ( 2 , 'Пожар');
INSERT INTO PROPERTY (ID, PROP1) VALUES ( 3 , 'Дождь');
INSERT INTO PROPERTY (ID, PROP1) VALUES ( 4 , 'Стекло');
выборка свойства для "встречи" объектов Огонь (1) и Вода (2):
Код: plaintext
1.
2.
3.
select p.prop1 from property p
join links l1 on l1.id_obj= 1 
join links l2 on l2.id_obj= 2 
where p.id=l1.id_prop and p.id=l2.id_prop
результат:
Код: plaintext
1.
PROP1
Пар
...
Рейтинг: 0 / 0
31.03.2011, 15:21
    #37192588
Volgar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
mvb, я извиняюсь, вроде работает, но как-то мой первоначальный пример не очень точный.

Лучше с цифрами. Вот у меня есть объекты 1, 2, 3, 4, 5 (это для примера в реальности их значительно больше). Все возможные комбинации их сочетаний: 1+2, 1+3, 1+4, 1+5, 2+3, 2+4, 2+5, 3+4, 3+5, 4+5.

Если делаю так, то ваша выборка не работает.

CREATE TABLE IF NOT EXISTS `LINKS` (
`ID` int(11) NOT NULL,
`ID_OBJ` int(11) DEFAULT NULL,
`ID_PROP` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;



INSERT INTO `LINKS` (`ID`, `ID_OBJ`, `ID_PROP`) VALUES
(1, 1, 2),
(2, 1, 2),
(3, 1, 4),
(4, 1, 5),
(5, 2, 3),
(6, 2, 4),
(7, 2, 5),
(8, 3, 4),
(9, 3, 5),
(10, 4, 5);



CREATE TABLE IF NOT EXISTS `OBJECTS` (
`ID` int(11) NOT NULL,
`NAME` varchar(220) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;



INSERT INTO `OBJECTS` (`ID`, `NAME`) VALUES
(1, '1'),
(2, '2'),
(3, '3'),
(4, '4'),
(5, '5');



CREATE TABLE IF NOT EXISTS `PROPERTY` (
`ID` int(11) NOT NULL,
`PROP1` varchar(220) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


INSERT INTO `PROPERTY` (`ID`, `PROP1`) VALUES
(1, '1+2'),
(2, '1+3'),
(3, '1+4'),
(4, '1+5'),
(5, '2+3'),
(6, '2+4'),
(7, '2+5'),
(8, '3+4'),
(9, '3+5'),
(10, '4+5');
...
Рейтинг: 0 / 0
31.03.2011, 17:09
    #37192877
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
Volgarmvb, я извиняюсь, вроде работает,

Если делаю так, то ваша выборка не работает.

Ты бы уже определился - работает или нет, и если не работает - как именно не работает?VolgarINSERT INTO `LINKS` (`ID`, `ID_OBJ`, `ID_PROP`) VALUES
(1, 1, 2),
(2, 1, 2),
зачем один и тот же объект (1) два раза ссылается на одно и то же свойство (2)?

Пример: Есть объект 1 и объект 2. Есть свойство "1-2" (его код=1). Чтобы добавить эту зависимость в базу, надо выполнить 2 вставки:
Код: plaintext
1.
2.
3.
INSERT INTO `LINKS` (`ID`, `ID_OBJ`, `ID_PROP`) VALUES
( 1 ,  1 ,  1 ),  -- объект 1, ссылка на свойство с кодом 1
( 2 ,  2 ,  1 )  -- объект 2, ссылка на свойство с кодом 1
...
Рейтинг: 0 / 0
31.03.2011, 17:15
    #37192896
Volgar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
Ты бы уже определился - работает или нет, и если не работает - как именно не работает?
Работает в примере со словами и не работает с цифрами.
зачем один и тот же объект (1) два раза ссылается на одно и то же свойство (2)?
Извиняюсь. Это ошибка. Должно быть:

NSERT INTO `LINKS` (`ID`, `ID_OBJ`, `ID_PROP`) VALUES
(1, 1, 2),
(2, 1, 3),
(3, 1, 4),
...
Рейтинг: 0 / 0
31.03.2011, 17:17
    #37192900
Volgar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
mvb, по второй части сейчас проверю.
...
Рейтинг: 0 / 0
31.03.2011, 17:31
    #37192935
Volgar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
mvb, отлично! Теперь все как нужно. Правда немного напрягает необходимость составлять вручную огромную таблицу связей. Нет ли способа как этот процесс механизировать?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
INSERT INTO `LINKS` (`ID`, `ID_OBJ`, `ID_PROP`) VALUES
( 1 ,  1 ,  1 ),
( 2 ,  2 ,  1 ),
( 3 ,  1 ,  2 ),
( 4 ,  3 ,  2 ),
( 5 ,  1 ,  3 ),
( 6 ,  4 ,  3 ),
( 7 ,  1 ,  4 ),
( 8 ,  5 ,  4 ),
( 9 ,  2 ,  5 ),
( 10 ,  3 ,  5 ),
( 11 ,  2 ,  6 ),
( 12 ,  4 ,  6 ),
( 13 ,  2 ,  7 ),
( 14 ,  5 ,  7 ),
( 15 ,  3 ,  8 ),
( 16 ,  4 ,  8 ),
( 17 ,  3 ,  9 ),
( 18 ,  5 ,  9 ),
( 19 ,  4 ,  10 ),
( 20 ,  5 ,  10 );
...
Рейтинг: 0 / 0
01.04.2011, 20:53
    #37195162
mvb
mvb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Структура таблиц - комбинация данных
Volgar, скорее всего есть, мне отсюда не видно :)
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц - комбинация данных / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]