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

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

Естественно таблица 100х100 не вариант. Есть какое-то решение, сейчас не вспомню как называется.
...
Рейтинг: 0 / 0
Структура таблиц - комбинация данных
    #37191164
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
Структура таблиц - комбинация данных
    #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
Структура таблиц - комбинация данных
    #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
Структура таблиц - комбинация данных
    #37192151
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
Структура таблиц - комбинация данных
    #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
Структура таблиц - комбинация данных
    #37192877
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
Структура таблиц - комбинация данных
    #37192896
Volgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ты бы уже определился - работает или нет, и если не работает - как именно не работает?
Работает в примере со словами и не работает с цифрами.
зачем один и тот же объект (1) два раза ссылается на одно и то же свойство (2)?
Извиняюсь. Это ошибка. Должно быть:

NSERT INTO `LINKS` (`ID`, `ID_OBJ`, `ID_PROP`) VALUES
(1, 1, 2),
(2, 1, 3),
(3, 1, 4),
...
Рейтинг: 0 / 0
Структура таблиц - комбинация данных
    #37192900
Volgar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mvb, по второй части сейчас проверю.
...
Рейтинг: 0 / 0
Структура таблиц - комбинация данных
    #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
Структура таблиц - комбинация данных
    #37195162
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volgar, скорее всего есть, мне отсюда не видно :)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Структура таблиц - комбинация данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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