Страница 1 из 1

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

Добавлено: 11 янв 2006, 22:36
Хыиуду
Ну, не знал, где этот вопрос задать ;)

Недавно начал работать с Access, надо мне создать базу данных о выпадении предметов с монстров в одной игре, так вот, делаю я таблицы Предметы (Название предмета, уровень, цена и т.д), Монстры (с полями Имя монстра, уровень, агрессивность, падающий предмет и т.д.), и Регионы (Название региона, страна, монстр и т.д.)
Проблема в том, что в одном регионе может водиться 2 типа монстров, а в другом - 20, и сколько делать полей Монстр в таблице Регионы - я не знаю. Подскажите, как тут создать таблицу (один и тот же тип монстров может встречаться в нескольких регионах)?

Добавлено: 12 янв 2006, 11:03
alexx
двоичную 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

Добавлено: 12 янв 2006, 12:06
Хыиуду
alexx, а если монстров в игре около 300? В Аксессе есть тип, поддерживающий 300-битовую строку?

Добавлено: 12 янв 2006, 13:45
Игорь Акопян
делать связь между таблицами Region и Monster один-ко-многим

Добавлено: 12 янв 2006, 14:14
Kolinus
или многие ко многим через промежуточную таблицу - проще будет искать в каких странах водятся кибердемоны :)

Добавлено: 12 янв 2006, 14:41
Хыиуду
Я тоже склоняюсь к мысли, что делать надо "Многие ко многим", поскольку в одном регионе может быть много монстров, один монстр может водиться во многих регионах. А промежуточная таблица тогда как будет выглядеть? ID записи, ID монстра, ID региона?

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