Я собираюсь разработать прототип MMORPG. Поэтому я должен хранить много предметов в базе данных.
Я хочу создать гибкую базу данных для простой масштабируемости. На всякий случай что-то не учитывается. Я думаю, что [Модель 1] хорошо подходит для моей цели.
Модель 1
CREATE TABLE Unit {
Id bigint NOT NULL PRIMARY KEY
ItemId bigint
}
CREATE TABLE Items {
Id bigint NOT NULL PRIMARY KEY
Type int NOT NULL
ParentItem bigint
Field1 int
Field2 int
Field3 int
}
Но я боюсь, что это довольно медленно.
Может быть [Модель 2] больше подходит для моего проекта. Я не хочу использовать это. Потому что это связывает мне руки для масштабирования базы данных.
Модель 2
CREATE TABLE Unit {
Id bigint NOT NULL PRIMARY KEY
ContainerId bigint
}
CREATE TABLE Items {
Id int NOT NULL PRIMARY KEY
Field1 int
Field2 int
Field3 int
ContainerId int
SubContainerId int
}
CREATE TABLE Containers {
Id int NOT NULL PRIMARY KEY
}
Вопросы:
Можно ли использовать [Модель 1] в таком проекте?
Насколько [Модель 1] медленнее, чем [Модель 2] для большого количества предметов?
Запланировано большое количество обновлений и вставок в таблицу Items.
PS: простите за мой английский. Мой родной язык русский.
Добавление для Quassnoi (см. Комментарии)
Пример из жизни.
У единицы есть предмет типа Bag. Сумка имеет любые предметы. Одним из предметов является мешочек с монетами двух типов.
Мне нужно сделать 3 запроса, чтобы получить список монет:
SELECT ItemId FROM Units WHERE Id = 1 /* it's a bag */
SELECT Id FROM Items WHERE ParentItem = firs_query_result AND Type = POUCH /* it's a pouch */
SELECT * FROM Items WHERE ParentItem = second_query_result AND (Type = COIN1 OR Type = COIN2) /* coins in my pouch */