2011-05-04 3 views
0

Я создаю базу данных и имею следующую структуру:Еще один вопрос с дизайном базы данных

Является игровой базой данных, и у меня будут пользователи, игры и группы.

A game will have 1 owner (an user). In other words a game will be created by an user. 
A game will have 1..n groups. 

A group will have 1 owner (an user). In other words a group will be created by an user. 
A group will have 1..n users. 

A user will belong to a group. The user can't belong to more that ONE group. 
A user will belong to a game. The user can't belong to more than ONE game. 

Я не знаю, как узнать, какой пользователь создал игру. Я думал в двух вариантах:

  • Добавить внешний ключ из игрового стола в таблицу .
  • добавить столбец в таблицу пользователя, называемый gameOwner, и установить его в true, если пользователь создал игру.

Вот мои таблицы:

User 
-------------------------------------- 
Id     | PK 
Name    | User name (not null) 
GroupOwner   | Bool type. True if user has created a group. 
GroupId    | FK to group table. Can be null: user is not playing any game now. 


Group 
-------------------------------------- 
Id     | PK 
Name    | Group name (not null) 
GameId    | FK to game table. Group belongs to this game. 


Game 
-------------------------------------- 
Id     | PK 
Name    | Game name (not null). 

Как я могу представить, что пользователь создал игру?

UPDATE

Игра всегда нужен хозяин.
Владелец игры всегда будет таким же.
Когда игра закончена, ее можно удалить.

+0

Q1: Будет ли владелец игра, всегда будет то же самое? например что происходит со временем? Q2: Требуется ли владельцам игра, чтобы существовать, т.е. игра ВСЕГДА должна иметь владельца? – trickwallett

+0

Я обновил свой вопрос более подробно (и ваши ответы). – VansFannel

ответ

4

Наиболее распространенным и естественным способом представления отношения собственности, о котором вы описали, является наличие внешних ключей в таблице «Группа» и «Игры» в таблице «Пользователь».

Если вы сделаете это, вам не понадобятся поля флага в таблице User, указывающие, является ли пользователь владельцем. Это может быть определено запросом.

Я бы с

User 
-------------------------------------- 
Id     | PK 
Name    | User name (not null) 
GroupId    | FK to group table. Can be null: user is not playing any game now. 


Group 
-------------------------------------- 
Id     | PK 
Name    | Group name (not null) 
GameId    | FK to game table. Group belongs to this game. 
OwnerId    | FK to User table. Group belongs to this user. 


Game 
-------------------------------------- 
Id     | PK 
Name    | Game name (not null). 
OwnerId    | FK to User table. Game belongs to this user. 
+0

+1 Я бы сказал, что это сработает. –

+0

Спасибо за ваш ответ. Если я использую это, у меня будет ссылка от пользователя к группе и ссылка от группы к пользователю. Это проблема? Я решил добавить столбец GroupOwner в таблицу User, чтобы этого избежать. – VansFannel

+2

Вы должны иметь обе ссылки, представляющие членство, и другую ссылочную собственность. Если пользователь всегда является членом принадлежащей ему группы, использование флага вместо внешнего ключа действительно может работать для идентификации владельца, но это чище. –

0

Сообщайте, что добавьте поле userID в таблицу групп и игр, которая относится к пользователю, являющемуся владельцем группы или игры.

Смежные вопросы