Многократные вхождения объекта в поле базы данных

Вопросы по программированию, не подходящие в другие разделы.

Модераторы: Naeel Maqsudov, C_O_D_E

Ответить
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Ну, не знал, где этот вопрос задать ;)

Недавно начал работать с Access, надо мне создать базу данных о выпадении предметов с монстров в одной игре, так вот, делаю я таблицы Предметы (Название предмета, уровень, цена и т.д), Монстры (с полями Имя монстра, уровень, агрессивность, падающий предмет и т.д.), и Регионы (Название региона, страна, монстр и т.д.)
Проблема в том, что в одном регионе может водиться 2 типа монстров, а в другом - 20, и сколько делать полей Монстр в таблице Регионы - я не знаю. Подскажите, как тут создать таблицу (один и тот же тип монстров может встречаться в нескольких регионах)?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
alexx
Сообщения: 116
Зарегистрирован: 02 июл 2004, 22:29
Откуда: Hamburg

двоичную cиcтeмy иcпoльзyйтe (Bitmask):

1) Monsters.id = 1 (0001)
2) Monsters.id = 2 (0010)
3) Monsters.id = 4 (0100)
4) Monsters.id = 8 (1000)


1) Regions.Monsters = 1 (0001) еcть Monster 1

2) Regions.Monsters = 3 (0011) еcть Monster 1 и Monster 2

3) Regions.Monsters = 9 (1001) еcть Monster 1 и Monster 4

B Access нaдо coздать Function для bitwise compare:

Код: Выделить всё

Public Function Bin_And(Val_A As Long, Val_B As Long) As Boolean
If Val_A And Val_B Then Bin_And = True
End Function
и иcпoльзывaть в Query (вce монстры pегионa 3):

Код: Выделить всё

SELECT Monsters.* FROM Monsters, Regions WHERE Bin_And(Monsters.id, Regions.Monsters) = True and Regions.id = 3
-------------
Лень - двигатель прогресса!
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

alexx, а если монстров в игре около 300? В Аксессе есть тип, поддерживающий 300-битовую строку?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

делать связь между таблицами Region и Monster один-ко-многим
Изображение
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

или многие ко многим через промежуточную таблицу - проще будет искать в каких странах водятся кибердемоны :)
В SAD - все в SAD.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Я тоже склоняюсь к мысли, что делать надо "Многие ко многим", поскольку в одном регионе может быть много монстров, один монстр может водиться во многих регионах. А промежуточная таблица тогда как будет выглядеть? ID записи, ID монстра, ID региона?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

точно ;)
хотя можно и без ИД записи, а сделать составной ключ из двух других полей - получишь гарантию что ничего не дублируется (правда тут стоит проверить возможность поиска - не факт что при поиске можно разделять ключ :-/)
В SAD - все в SAD.
Ответить