Очень большая производительность таблиц в SQL Server 2008 - PullRequest
0 голосов
/ 14 августа 2011

Я собираюсь разработать прототип 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. Насколько [Модель 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 */
...